Ps:Comparable和Comparator接口的区别
Comparable 是排序接口,重写的时候可以用本身具有排序功能的类。
转载一个详解:https://blog.youkuaiyun.com/u010859650/article/details/85009595
P1080 国王游戏
import java.math.BigInteger;
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
BigInteger k1 = scan.nextBigInteger();
BigInteger k2 = scan.nextBigInteger();
King[] kings = new King[n];
for (int i = 0; i < n; i ++)
kings[i] = new King(scan.nextBigInteger(), scan.nextBigInteger());
Arrays.sort(kings);
BigInteger result = new BigInteger("1");
for (int i = 0; i < n - 1; i ++)
result = result.multiply(kings[i].left);
result = result.multiply(k1).divide(kings[n - 1].right);
if (result.compareTo(new BigInteger("1")) < 0)
System.out.println("1");
else
System.out.println(result);
}
}
class King implements Comparable{
BigInteger left;
BigInteger right;
public King(BigInteger left, BigInteger right) {
this.left = left;
this.right = right;
}
@Override
public int compareTo(Object o) {//从小到大
King k = (King) o;
return this.left.multiply(this.right).compareTo(k.left.multiply(k.right));
}
}
转一个关于重载sort:https://www.cnblogs.com/zsyacm666666/p/6657017.html
P1208 [USACO1.3]混合牛奶 Mixing Milk
import java.util.*;
class node{
int price = 0;
int number = 0;
public node(int price, int number) {
this.price = price;
this.number = number;
}
}
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Comparator cmp = new cmp();
int n = scan.nextInt();
int m = scan.nextInt();
if (n == 0 && m == 0){
System.out.println("0");
return;
}
node[] nums = new node[m];
for (int i = 0; i < m; i ++){
nums[i] = new node(scan.nextInt(), scan.nextInt());
}
int cost = 0;
int sum = 0;
Arrays.sort(nums, cmp);
/*for (int i = 0; i < m; i ++)
System.out.println(nums[i].price + " " + nums[i].number);*/
for (int i = 0; i < m; i ++){
if (nums[i].number + sum <= n){
sum += nums[i].number;
cost += nums[i].number*nums[i].price;
if (sum == n){
System.out.println(cost);
return;
}
}else{
int t = n - sum;
cost += nums[i].price * t;
System.out.println(cost);
return;
}
}
}
private static class cmp implements Comparator<node>{
@Override
public int compare(node n1, node n2) {//从小到大
if (n1.price == n2.price)
return 0;
return n1.price > n2.price ? 1 : -1;
}
}
}
这是一道洛谷的简单模拟
P1056 排座椅:https://www.luogu.com.cn/problem/P1056
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int m = scan.nextInt();//m行
int n = scan.nextInt();//n列
int k = scan.nextInt();//行横线
int l = scan.nextInt();//列线
int d = scan.nextInt();//d对
Map<Integer, Integer> row = new HashMap<>();
Map<Integer, Integer> column = new HashMap<>();
int[][] room = new int[d][4];
for (int i = 0; i < d; i ++){
for(int j = 0; j < 4; j ++)
room[i][j] = scan.nextInt();
}
//0 2 hang 1 3 lie
for (int i = 0; i < d; i ++){
if (room[i][0] == room[i][2]){
int min = Math.min(room[i][1], room[i][3]);
if (column.containsKey(min))
column.put(min, column.get(min) + 1);
else
column.put(min, 1);
}
if (room[i][1] == room[i][3]){
int min = Math.min(room[i][0], room[i][2]);
if (row.containsKey(min))
row.put(min, row.get(min) + 1);
else
row.put(min, 1);
}
}
List<Map.Entry<Integer, Integer>> list2 = new ArrayList<>(row.entrySet());
list2.sort(new Comparator<Map.Entry<Integer, Integer>>() {
@Override
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());//从大到小
}
});
int[] kk = new int[k];
for (int i = 0; i < k; i ++){
kk[i] = list2.get(i).getKey();
}
Arrays.sort(kk);
for (int i = 0; i < k; i ++){
if (i != k - 1)
System.out.print(kk[i] + " ");
else
System.out.println(kk[i]);
}
List<Map.Entry<Integer, Integer>> list1 = new ArrayList<>(column.entrySet());
list1.sort(new Comparator<Map.Entry<Integer, Integer>>() {
@Override
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
int[] ll = new int[l];
for (int i = 0; i < l; i ++)
ll[i] = list1.get(i).getKey();
Arrays.sort(ll);
for (int i = 0; i < l; i ++){
if (i != l - 1)
System.out.print(ll[i] + " ");
else
System.out.print(ll[i]);
}
}
}
原文链接:https://blog.youkuaiyun.com/weixin_40263219/java/article/details/88690701
方法一:
Integer a[]=new Integer[]{34,4,45,12,92,9};
Arrays.sort(a, new Comparator() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
Arrays进行从大到小的排序,所排序的必须是Integer对象,否则将出错,也即a中的数据类型必须是Integer类型,不能是int类型。
方法二:
ArrayList arr = new ArrayList();
arr.add(11);
arr.add(33);
arr.add(22);
Collections.sort(arr, new Comparator() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});