给你一个长度为 n
的数组 apple
和另一个长度为 m
的数组 capacity
。
一共有 n
个包裹,其中第 i
个包裹中装着 apple[i]
个苹果。同时,还有 m
个箱子,第 i
个箱子的容量为 capacity[i]
个苹果。
请你选择一些箱子来将这 n
个包裹中的苹果重新分装到箱子中,返回你需要选择的箱子的 最小 数量。
注意,同一个包裹中的苹果可以分装到不同的箱子中。
示例 1:
输入:apple = [1,3,2], capacity = [4,3,1,5,2]
输出:2
解释:使用容量为 4 和 5 的箱子。
总容量大于或等于苹果的总数,所以可以完成重新分装。
示例 2:
输入:apple = [5,5,5], capacity = [2,4,2,7]
输出:4
解释:需要使用所有箱子。
提示:
1 <= n == apple.length <= 50
1 <= m == capacity.length <= 50
1 <= apple[i], capacity[i] <= 50
- 输入数据保证可以将包裹中的苹果重新分装到箱子中。
简单题目没什么意思
class Solution {
public:
int minimumBoxes(vector<int>& apple, vector<int>& capacity) {
int sum = 0;
for(auto &i : apple){
sum+=i;
}
sort(capacity.begin(),capacity.end());
reverse(capacity.begin(),capacity.end());
int cnt=0;
int a = 0;
for(auto &i : capacity){
cnt+=i;
a++;
if(cnt>=sum){
break;
}
}
return a;
}
};
给你一个长度为 n
的数组 happiness
,以及一个 正整数 k
。
n
个孩子站成一队,其中第 i
个孩子的 幸福值 是 happiness[i]
。你计划组织 k
轮筛选从这 n
个孩子中选出 k
个孩子。
在每一轮选择一个孩子时,所有 尚未 被选中的孩子的 幸福值 将减少 1
。注意,幸福值 不能 变成负数,且只有在它是正数的情况下才会减少。
选择 k
个孩子,并使你选中的孩子幸福值之和最大,返回你能够得到的 最大值 。
示例 1:
输入:happiness = [1,2,3], k = 2
输出:4
解释:按以下方式选择 2 个孩子:
- 选择幸福值为 3 的孩子。剩余孩子的幸福值变为 [0,1] 。
- 选择幸福值为 1 的孩子。剩余孩子的幸福值变为 [0] 。注意幸福值不能小于 0 。
所选孩子的幸福值之和为 3 + 1 = 4 。
示例 2:
输入:happiness = [1,1,1,1], k = 2
输出:1
解释:按以下方式选择 2 个孩子:
- 选择幸福值为 1 的任意一个孩子。剩余孩子的幸福值变为 [0,0,0] 。
- 选择幸福值为 0 的孩子。剩余孩子的幸福值变为 [0,0] 。
所选孩子的幸福值之和为 1 + 0 = 1 。
示例 3:
输入:happiness = [2,3,4,5], k = 1
输出:5
解释:按以下方式选择 1 个孩子:
- 选择幸福值为 5 的孩子。剩余孩子的幸福值变为 [1,2,3] 。
所选孩子的幸福值之和为 5 。
提示:
1 <= n == happiness.length <= 2 * 105
1 <= happiness[i] <= 108
1 <= k <= n
简单的贪心
class Solution {
public:
long long maximumHappinessSum(vector<int>& happiness, int k) {
long long sum = 0;
sort(happiness.begin(),happiness.end());
reverse(happiness.begin(),happiness.end());
for(int i = 0;i < k;i++ ){
if(happiness[i]-i<=0){
happiness[i] = i;
}
long long a = happiness[i]-i;
sum+=a;
}
return sum;
}
};
后面不会了