题目来源:数位排序
之前写过一个刷题中遇到的排序问题洛谷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<Integer> 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<Node>{ 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; } } } }