LeetCode第2600题-K件物品的最大和
题目要求
袋子中装有一些物品,每个物品上都标记着数字 1 、0 或 -1 。
四个非负整数 numOnes 、numZeros 、numNegOnes 和 k 。
袋子最初包含:
- numOnes 件标记为 1 的物品。
- numZeroes 件标记为 0 的物品。
- numNegOnes 件标记为 -1 的物品。
现计划从这些物品中恰好选出 k 件物品。返回所有可行方案中,物品上所标记数字之和的最大值。
举例
输入:numOnes = 3, numZeros = 2, numNegOnes = 0, k = 2
输出:2
解释:袋子中的物品分别标记为 {1, 1, 1, 0, 0} 。取 2 件标记为 1 的物品,得到的数字之和为 2 。
可以证明 2 是所有可行方案中的最大值。
输入:numOnes = 3, numZeros = 2, numNegOnes = 0, k = 4
输出:3
解释:袋子中的物品分别标记为 {1, 1, 1, 0, 0} 。取 3 件标记为 1 的物品,1 件标记为 0 的物品,得到的数字之和为 3 。
可以证明 3 是所有可行方案中的最大值。
思路
第一次首次提交就成功的题目!!!
- 就是1、0、-1的问题,直接用数量判断就行
- 不够1的就是k,超过1+0的就减去剩几个-1
- 其他的就是1的数量
代码实现
var kItemsWithMaximumSum = function (numOnes, numZeros, numNegOnes, k) {
if (k <= numOnes) return k
if (k > numOnes + numZeros) return 2*numOnes + numZeros - k
return numOnes
};
2*numOnes + numZeros - k本来是numOnes - (k - numOnes - numZeros),运用小学去括号的数学知识进行简化