蓝桥杯-1/14天-数位排序【继承Comparable接口实现排序】

题目来源:数位排序

         之前写过一个刷题中遇到的排序问题洛谷1093,先根据学生的总成绩排序如果总分一样的情况下再根据语文排序。总结最好的方法就是写一个类继承Comparable接口来重写compare方法

之前学艺不精,都是直接拿数据结构(List、Map)肝,比如这道题,我一开始直接拿List存储 1~n ,然后把list传数组然后写一个sort方法用冒泡对 数组 进行排序,结构就是超时

因为如果测试集中有相当大的数据时,冒泡排序是一种很耗时的方法,它只适合对少量的数据进行排序。

使用类继承Comparable接口重写compare的方法:

import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改
 
public class Main {
    private static List list = new ArrayList();
 
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int m = scan.nextInt();
        scan.close();
 
        for(int i=1;i<=n;i++){
            list.add(i);
        }
 
        int[] arr = sort(list);
        System.out.println(arr[m-1]);
 
    }
 
    public static int sumOfBit(int num){
        int sum=0;
            int temp=0;
            while (num!=0){
                temp=num%10;
                sum+=temp;
                num/=10;
            }
            return sum;
    }
}
 
private static class Node implements Comparable{
        int sumOfBit;
        int value = 0;
        public Node(int value){
            this.value = value;
            this.sumOfBit = sumOfBit(value);
        }
        @Override
        public int compareTo(Node o) {
            if (this.sumOfBit > o.sumOfBit){
                return 1;
            }else if (this.sumOfBit == o.sumOfBit){
                if (this.value > o.value){
                    return 1;
                }else {
                    return -1;
                }
            }else {
                return -1;
            }
        }
 
    }
}


发表评论