微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

创建一种算法,对它们进行排列以形成最大可能的整数

如何解决创建一种算法,对它们进行排列以形成最大可能的整数

我正在用Java解决这个编码问题。必须使用算法来解决。应该给我最大可能的间隔,该间隔可以由数组中的数字组成:{10,7,76,415}。我试图使用选择排序解决它。到目前为止,我的代码是下面的内容,但是它给了我错误输出。我的代码

公共类maximumNumber { public static int maximumNumber(int [] arr){

    for (int i = 1; i < arr.length -1; i++) {
        for (int j = i +1; j < arr.length; j++) {
            String temp1 = Integer.toString(i) + Integer.toString(j);
            String temp2 = Integer.toString(j) + Integer.toString(i);
            
            if (Integer.parseInt(temp2) > Integer.parseInt(temp1)) {
                int swap = arr[i];
                arr[i] = arr[j];
                arr[j] = swap;
            }
        }

    
    }
    
    String ansNum = "";
    for (int i = 0; i < arr.length; i++) {
        ansNum += Integer.toString(arr[i]);
        
    }
    
    return Integer.parseInt(ansNum);

}
public static void main(String[] args) {   
    int [] arr = {10,7,76,415};
    int output = largestNumber(arr);
    System.out.println(output); //Print out the number
}

}

代码的给定输出为:10415767 但是正确的答案是:77641510

请提供您的反馈和想法。

解决方法

修复错误,如下所示,它应该可以工作。

for (int i = 0; i < arr.length; i++) { //correction here
        for (int j = i +1; j < arr.length; j++) {
                String temp1 = Integer.toString(arr[i]) + Integer.toString(arr[j]); //correction here
                String temp2 = Integer.toString(arr[j]) + Integer.toString(arr[i]); //correction here

要编写一些优雅的代码,我将使用如下所示的比较器:

        String[] stringArr = new String[arr.length];
        for(int i = 0; i < arr.length; i++)
            stringArr[i] = String.valueOf(arr[i]);
    
        Comparator<String> comp = new Comparator<String>(){
            @Override
            public int compare(String str1,String str2){
                String s1 = str1 + str2;
                String s2 = str2 + str1;
                return s2.compareTo(s1);
            }
         };
        
        Arrays.sort(stringArr,comp);
    
        String ansNum = "";
        for(int i = 0; i < stringArr.length; i++) {
            ansNum += stringArr[i];
            
        }
        
        return Integer.parseInt(ansNum);

要谈论时间复杂度,代码中的两个for循环使该解决方案O(n^2),而使用sort则变成O(nlog(n)),其中n是输入数组中元素的数量。因此,不仅使用比较器使代码变得优雅,在这种情况下,代码也变得高效。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。