跳到主要内容

2600.K件物品的最大和

链接:2600.K件物品的最大和
难度:Easy
标签:贪心、数学
简介:现计划从这些物品中恰好选出 k 件物品。

题解 1 - cpp

  • 编辑时间:2023-03-26
  • 内存消耗:5.7MB
  • 编程语言:cpp
  • 解法介绍:分段计算。
class Solution {
public:
int kItemsWithMaximumSum(int numOnes, int numZeros, int numNegOnes, int k) {
if (numOnes >= k) return k;
if (numOnes + numZeros >= k) return numOnes;
return numOnes - (k - numOnes - numZeros);
}
};

题解 2 - python

  • 编辑时间:2023-03-26
  • 执行用时:36ms
  • 内存消耗:14.9MB
  • 编程语言:python
  • 解法介绍:同上。
class Solution:
def kItemsWithMaximumSum(self, numOnes: int, numZeros: int, numNegOnes: int, k: int) -> int:
if numOnes >= k:
return k
elif numOnes + numZeros >= k:
return numOnes
else:
return numOnes - (k - numOnes-numZeros)

题解 3 - rust

  • 编辑时间:2023-03-26
  • 内存消耗:2MB
  • 编程语言:rust
  • 解法介绍:同上。
impl Solution {
pub fn k_items_with_maximum_sum(
num_ones: i32,
num_zeros: i32,
num_neg_ones: i32,
k: i32,
) -> i32 {
if num_ones >= k {
k
} else if num_ones + num_zeros >= k {
num_ones
} else {
num_ones - (k - num_ones - num_zeros)
}
}
}

题解 4 - cpp

  • 编辑时间:2023-07-05
  • 执行用时:8ms
  • 内存消耗:5.9MB
  • 编程语言:cpp
  • 解法介绍:贪心。
class Solution {
public:
int kItemsWithMaximumSum(int numOnes, int numZeros, int numNegOnes, int k) {
int res = 0;
if (k && numOnes) {
res += min(k, numOnes);
k -= min(k, numOnes);
}
if (k && numZeros) {
k -= min(k, numZeros);
}
if (k && numNegOnes) {
res -= min(k, numNegOnes);
k -= min(k, numNegOnes);
}
return res;
}
};