华为OD机试题_给出一个数组,拼接成最大值

weixin_43008225 2020-10-12 09:19:23
今年参加了两次华为OD机试,遗憾都没通过。在这里把机试的题目分享给大家,希望大家一同进步。华为机试题目描述比较复杂,意思大概如下
题目:
给出一个数组,里面的每个数字都不超过5位,请拼接处最大值。数组长度最大为25。求拼接后的最大值


public class MaximumNumber {

/*
给定一个数组:组合成最大数值
*/
public String combinate(int[] nums) {
if (null == nums || nums.length == 0) {
return "";
}
StringBuilder stringBuilder = new StringBuilder();
compareNums(nums);
for (int i = 0; i < nums.length; i++) {
stringBuilder.append(String.valueOf(nums[i]));
}
return stringBuilder.toString();
}

/*
排序
*/
private void compareNums(int[] nums) {
if (null == nums) {
throw new NullPointerException();
}
if (nums.length == 1) {
return;
}
int temp;
for (int i = 0; i < nums.length - 1; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (compare(nums[i], nums[j])) {
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}

}

/*
比较两个数字哪个作高位排列
example: 9, 98 --> 998; 15, 18 --> 1815
*/
private boolean compare(int a, int b) {
String aa = String.valueOf(a);
String bb = String.valueOf(b);
int ab = Integer.valueOf(aa + bb);
int ba = Integer.valueOf(bb + aa);
if (ba > ab) {
return true;
} else {
return false;
}
}

public static void main(String[] args) {
MaximumNumber maximumNumber = new MaximumNumber();
int[] b = {35, 11, 23, 4, 34};
System.out.println(maximumNumber.combinate(b));
}
}

...全文
2176 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

我道题,我也遇见了,但是我昨晚之后,用例通过86%,仔细看了看,是没有错的呀,不知道错哪里了,请大家研究一下

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

/**
 * 实际就是比较字符串大小
 */
public class T1 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            StringBuilder sb = new StringBuilder();
            String[] contents = in.nextLine().split(",");
            Arrays.sort(contents, (o1, o2) -> {
                if (o1.startsWith(o2) && !o1.equals(o2)) {
                    StringBuilder sb1 = new StringBuilder(o2);
                    int length = o1.length() - o2.length();
                    for (int i = 0; i < length;i++) {
                        char c = o1.charAt(i);
                        sb1.append(c);
                    }
                    if (Integer.parseInt(sb1.toString()) > Integer.parseInt(o1)) {
                        return -1;
                    } else {
                        return 1;
                    }
                }
                return o1.compareTo(o2);
            });
            for (int i= contents.length - 1; i >=0; i--) {
                sb.append(contents[i]);
            }
            System.out.println(sb.toString());
        }
    }
}


zhongba521 2020-10-13
  • 打赏
  • 举报
回复
兄弟 你没处理负数啊
KeepSayingNo 2020-10-13
  • 打赏
  • 举报
回复
这个就是考察你排序的时候,首先认为每个数字为一个字符串,然后将每个字符串按照长度和字符的AcsII码进行排序,排序后再取出来一个个拼接

51,396

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧