猿辅导笔试
这个第一题组队的题,我一直0,实在想不到自己的逻辑哪里出问题了,请教一下各位大佬
老哥们,知道问题在哪里里,是贪心陷阱
比如 2 2 2 2 2,组队数是3
第一轮(1 1 1)->1 1 1 2 2
第二轮(1 1 1)->1 1 0 1 1
第三轮(1 1 1)->0 0 0 0 1
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution {
public:
int findAnagrams(vector<int>& nums, int k) {
sort(nums.begin(), nums.end());
int res = 0;
//[l-p.size()+1,l]区间内判断是或否与p anagram 有k个元素
for (int r = 0; r < nums.size(); r++) {
int l = r - k + 1;
if(l>=0 && nums[l]<=0)
continue;
//长度等于k,这样下一轮就有p.size()个值
if (l >= 0){
int js = nums[l];
res += js;
for(int i=l; i<=l+2; i++){
nums[i] -= js;
}
}
// cout << r <<":" <<endl;
// cout << l <<" "<<endl;
// printVec (nums);
}
return res;
}
};
int main() {
int c;
cin >> c;
int n, num;
for(int i=0; i<c; i++){
vector<int> nums;
cin >> n;
for(int j=0; j<n; j++){
cin >> num;
nums.push_back(num);
}
int res = Solution().findAnagrams(nums, 3);
cout << res <<endl;
}
return 0;
} 