• 给出一个数组,如 [7864, 284, 347, 7732, 8498],现在需要将数组中的数字拼接起来,返回「最大的可能拼出的数字」


    /**
     * 给出一个数组,如 [7864, 284, 347, 7732, 8498],
     * 现在需要将数组中的数字拼接起来,如按顺序依次拼接为:786428434777328498,数组中的数字拼接顺序可以任意,
     * 编写程序,返回「最大的可能拼出的数字」。(以上面数组为例,返回849878647732347284)
     * @param arrays
     * @return
     */

    解题思路:拆解数组中的每一个数,将数值存放到栈中(明显的栈形数据结构);排序(用到了冒泡排序的思路) ,排序过程比较大小通过各数值之间的高位到低位的大小比较,比如8,70,按照这个排序8属于大者;最后将数组从后向前输出即完成拼接

    1. public static String getMaxNum(long[] arrays) {
    2. if (arrays == null || arrays.length == 0) {
    3. return "0";
    4. }
    5. //存放所有拆解后的数据集
    6. Map<Long, Stack<Integer>> numMaps = Maps.newHashMap();
    7. for (long tn : arrays) {
    8. long t = tn;
    9. Stack<Integer> qu = new Stack<>();
    10. do {
    11. qu.push((int) t % 10);
    12. t = t / 10;
    13. } while (t > 0);
    14. numMaps.put(tn, qu);
    15. }
    16. for (int i = 0; i < arrays.length; i++) {
    17. for (int j = 0; j < arrays.length - i - 1; j++) {
    18. Stack<Integer> f = numMaps.get(arrays[j]);
    19. Stack<Integer> s = numMaps.get(arrays[j + 1]);
    20. //比较大小
    21. int fn = f.size() - 1;
    22. int sn = s.size() - 1;
    23. do {
    24. if (f.get(fn) < s.get(sn)) {
    25. break;
    26. }
    27. if (f.get(fn) > s.get(sn)) {
    28. long tn = arrays[j];
    29. arrays[j] = arrays[j + 1];
    30. arrays[j + 1] = tn;
    31. break;
    32. }
    33. fn--;
    34. sn--;
    35. } while (fn >= 0 && sn >= 0);
    36. if (fn == -1 || sn == -1) {
    37. fn = fn == -1 ? 0 : fn;
    38. sn = sn == -1 ? 0 : sn;
    39. if (f.get(fn) > s.get(sn)) {
    40. long tn = arrays[j];
    41. arrays[j] = arrays[j + 1];
    42. arrays[j + 1] = tn;
    43. }
    44. }
    45. }
    46. }
    47. StringBuffer sb = new StringBuffer();
    48. for (int i = arrays.length - 1; i >= 0; i--)
    49. sb.append(arrays[i]);
    50. return sb.toString();
    51. }

     执行Case数据

    1. long a[] = new long[]{764, 76, 77};
    2. long b[] = new long[]{767, 76, 77};
    3. long c[] = new long[]{7864, 284, 347, 7732, 8498};

    执行结果

     

  • 相关阅读:
    SaaSBase:什么是讯众通信?
    [JAVAee]Linux上的javax.mail报错
    撸一个随机数生成器
    解码未来:Web3如何重塑我们的生活
    字节跳动测试岗面试记:二面被按地上血虐,所幸Offer已到手...
    WhatsApp营销引流-SendWS拓客系统功能后台介绍(五):WhatsApp素材管理
    【开源】SpringBoot框架实验室耗材管理系统
    二叉搜索树中的搜索(力扣700)
    mac上配置maven
    HTML动态爱心
  • 原文地址:https://blog.csdn.net/I_peter/article/details/125600037