当前位置:网站首页>给出一个数组,如 [7864, 284, 347, 7732, 8498],现在需要将数组中的数字拼接起来,返回「最大的可能拼出的数字」
给出一个数组,如 [7864, 284, 347, 7732, 8498],现在需要将数组中的数字拼接起来,返回「最大的可能拼出的数字」
2022-07-07 21:52:00 【漁陽】
/** * 给出一个数组,如 [7864, 284, 347, 7732, 8498], * 现在需要将数组中的数字拼接起来,如按顺序依次拼接为:786428434777328498,数组中的数字拼接顺序可以任意, * 编写程序,返回「最大的可能拼出的数字」。(以上面数组为例,返回849878647732347284) * @param arrays * @return */
解题思路:拆解数组中的每一个数,将数值存放到栈中(明显的栈形数据结构);排序(用到了冒泡排序的思路) ,排序过程比较大小通过各数值之间的高位到低位的大小比较,比如8,70,按照这个排序8属于大者;最后将数组从后向前输出即完成拼接
public static String getMaxNum(long[] arrays) {
if (arrays == null || arrays.length == 0) {
return "0";
}
//存放所有拆解后的数据集
Map<Long, Stack<Integer>> numMaps = Maps.newHashMap();
for (long tn : arrays) {
long t = tn;
Stack<Integer> qu = new Stack<>();
do {
qu.push((int) t % 10);
t = t / 10;
} while (t > 0);
numMaps.put(tn, qu);
}
for (int i = 0; i < arrays.length; i++) {
for (int j = 0; j < arrays.length - i - 1; j++) {
Stack<Integer> f = numMaps.get(arrays[j]);
Stack<Integer> s = numMaps.get(arrays[j + 1]);
//比较大小
int fn = f.size() - 1;
int sn = s.size() - 1;
do {
if (f.get(fn) < s.get(sn)) {
break;
}
if (f.get(fn) > s.get(sn)) {
long tn = arrays[j];
arrays[j] = arrays[j + 1];
arrays[j + 1] = tn;
break;
}
fn--;
sn--;
} while (fn >= 0 && sn >= 0);
if (fn == -1 || sn == -1) {
fn = fn == -1 ? 0 : fn;
sn = sn == -1 ? 0 : sn;
if (f.get(fn) > s.get(sn)) {
long tn = arrays[j];
arrays[j] = arrays[j + 1];
arrays[j + 1] = tn;
}
}
}
}
StringBuffer sb = new StringBuffer();
for (int i = arrays.length - 1; i >= 0; i--)
sb.append(arrays[i]);
return sb.toString();
}
执行Case数据
long a[] = new long[]{764, 76, 77};
long b[] = new long[]{767, 76, 77};
long c[] = new long[]{7864, 284, 347, 7732, 8498};
执行结果
边栏推荐
- 微信论坛交流小程序系统毕业设计毕设(2)小程序功能
- Opencv scalar passes in three parameters, which can only be displayed in black, white and gray. Solve the problem
- LDO稳压芯片-内部框图及选型参数
- Install a new version of idea. Double click it to open it
- Mitsubishi PLC SLmP (MC) protocol
- leetcode-520. 检测大写字母-js
- 1. Sum of two numbers
- U盘拷贝东西时,报错卷错误,请运行chkdsk
- js 获取对象的key和value
- 网络安全-安装CentOS
猜你喜欢
深入理解Mysql锁与事务隔离级别
LeeCode -- 6. Z 字形变换
14、 Two methods of database export and import
Brush question 3
ArcGIS:字段赋值_属性表字段计算器(Field Calculator)依据条件为字段赋值
When copying something from the USB flash disk, an error volume error is reported. Please run CHKDSK
V20变频器手自动切换(就地远程切换)的具体方法示例
Installing spss25
In the field of software engineering, we have been doing scientific research for ten years!
js 获取对象的key和value
随机推荐
Archlinux install MySQL
网络安全-安装CentOS
位运算(Bit Operation)
聊聊支付流程的设计与实现逻辑
Install a new version of idea. Double click it to open it
微信论坛交流小程序系统毕业设计毕设(4)开题报告
成年人只有一份主业是要付出代价的,被人事劝退后,我哭了一整晚
Network security - phishing
Clean C disk
高级程序员必知必会,一文详解MySQL主从同步原理,推荐收藏
海内外技术人们“看”音视频技术的未来
leetcode-520. 检测大写字母-js
turbo intruder常用脚本
力扣解法汇总648-单词替换
Brush question 6
JMeter interface automated test read case, execute and write back result
USB(十四)2022-04-12
Network security CSRF
Adrnoid Development Series (XXV): create various types of dialog boxes using alertdialog
STL标准模板库(Standard Template Library)一周学习总结