个人技术分享

每日一题

cdbde9ba7864414488b4b7f471780aa2.png

chika和蜜柑 (nowcoder.com)

 题目解析:就是按照优先级进行排序然后输出前k个的和即可

思路分析:把甜度和酸度封装成一个对象,然后重写sort方法,先按照arr进行降序排序,相同在按照brr升序排序 ,然后输出前k个的和即可

代码实现

 

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt(), k = scanner.nextInt();
        Orange[] oranges = new Orange[n];
        for (int i = 0; i < n; i++) {
            oranges[i] = new Orange();
            oranges[i].setB(scanner.nextInt());
        }
        for (int i = 0; i < n; i++) {
            oranges[i].setA(scanner.nextInt());
        }
        Arrays.sort(oranges, (x, y) -> {
            if (x.getA() == y.getB()) return x.getB() - y.getB();
            return y.getA() - x.getA();
        });
        long retArr = 0, retBrr = 0;
        for (int i = 0; i < k; i++) {
            retArr += oranges[i].getA();
            retBrr += oranges[i].getB();
        }
        System.out.println(retBrr + " " + retArr);
    }
}

class Orange {
    private int a;
    private int b;

    public Orange() {}

    public Orange(int a, int b) {
        this.a = a;
        this.b = b;
    }

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    public int getB() {
        return b;
    }

    public void setB(int b) {
        this.b = b;
    }
}