zoukankan      html  css  js  c++  java
  • 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;
        }
    }
    
    
  • 相关阅读:
    Python 安装、循环语句、数据类型(一)
    Python 字符、整型、列表字典等操作(二)
    JAVA实现文章的上一篇下一篇
    什么是公钥、私钥、密码、助记词
    XSS跨站网络攻击
    区块链相关知识
    冷钱包
    .NET 后台提交POST请求
    邮件的发送
    数据库中字段类型对应的C#中的数据类型
  • 原文地址:https://www.cnblogs.com/alidata/p/13527047.html
Copyright © 2011-2022 走看看