2023-07-05 2600. K 件物品的最大和

53 阅读1分钟

leetcode.cn/problems/k-…

使用贪心的思想。为了让结果最大:

  • 首先拿 numOnes 中的物品
  • 如果那不够 k 件物品,那么从 numZeros 中拿
  • 如果还是没拿够 k 件物品,再从 numNegOnes 中拿

时间复杂度:O(1)

空间复杂度:O(1)

class Solution {
    public int kItemsWithMaximumSum(int numOnes, int numZeros, int numNegOnes, int k) {
        int sum = 0;
        if (k > 0 && numOnes > 0) {
            if (k >= numOnes) {
                k -= numOnes;
                sum += numOnes;
            } else {
                sum += k;
                k = 0;
            }
        }

        if (k > 0 && numZeros > 0) {
            if (k >= numZeros) {
                k -= numZeros;
            } else {
                k = 0;
            }
        }

        if (k > 0 && numNegOnes > 0) {
            if (k >= numNegOnes) {
                k -= numNegOnes;
                sum -= numNegOnes;
            } else {
                sum -= k;
                k = 0;
            }
        }
        return sum;
    }
}