JAVA-给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。


题目描述

Arrays.sort()

Arrays.sort()中只有数组参数

int[] array = {5, 6, -1, 4};
Arrays.sort(array);

这种是默认的排序,按照字典序(ASCII)的顺序进行排序。

Arrays.sort()中数组参数和排序方法

使用提供的方法

String[] str = {“abc”, “aaa”, “abc”};
Arrays.sort(str, String.CASE_INSENSITIVE_ORDER);

String中定义的忽略大小写,完全通过字母的顺序进行排序

Arrays.sort(str, Collections.reverseOrder());
反向排序

自定义排序方法

出来使用java提供的排序方法外,还可以使用自定义的排序方法,自定义排序方法需要实现java.util.Comparetor接口中的compare方法。

public int compare(String a, String b) {
            // 返回正数表示要交换,正常为b+a,即大的放前
            // 由小到大排序(前者减去后者)
            // 由大到小排序(后者减去前者)
            String r1=a+b;
            String r2=b+a;
            return b.compareTo(a);
        }

int compare(Object obj1, Object obj2)
compare方法 返回负数时代表不交换
compare方法 返回0时代表不交换
compare方法 返回正数时代表交换

具体代码



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

/**
 * @Author: hwj
 * @Date: 2020/8/19 0:33
 * Desc: 给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
 */
public class MaxNumber {


    public static void main(String[] args) {
        int[] num={3,30,34,5,9};
        System.out.println(largeNumber(num));
    }
    private static class LargerString implements Comparator<String> {

        @Override
        public int compare(String a, String b) {
            // 返回正数表示要交换,正常为b+a,即大的放前
            // 由小到大排序(前者减去后者)
            // 由大到小排序(后者减去前者)
            String r1=a+b;
            String r2=b+a;
            return r2.compareTo(r1);
        }
    }
    /**
     * 1. 获取整形数组的每个值,将其转化为String类型数组中
     * 2. 数组两两排列进行比较,得到最好的数组排序
     * 3。定义一个String类型字符串,数组拼接为字符串
     */
    public static String largeNumber(int[] num){
        String[] sArray=new String[num.length];
        for(int i=0;i<num.length;i++){
            sArray[i]=String.valueOf(num[i]);
        }
        Arrays.sort(sArray,new LargerString() );
        if(sArray[0].equals("0")){
            return "0";
        }
        String largeString="";
        for(int i=0;i<sArray.length;i++){
            largeString+=sArray[i];
        }

        return largeString;
    }
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



猜您在找 Leetcode练习(Python):排序类:第179题:最大数:给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。 java-求一组整数中的最大值 pandas根据index操作与重新排列 Leetcode练习(Python):第441题:排列硬币:你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币。 给定一个数字 n,找出可形成完整阶梯行的总行数。 n 是一个非负整数,并且在32位有符号整型的范围内。 Leetcode练习(Python):数组类:第55题:给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 非负整数可重集去重&排序+获得可重集的全排列的几种方法 Problem Description 有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。 Input 输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数 最短路径(给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。) 一个线性表中的元素为整数,设计一个算法,将正整数和负整数分开,使线性表的前一半为负整数,后一半为正整数。(C语言) Java -- 给定一个int数组,拼接出最大数值
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM