猿辅导笔试
这个第一题组队的题,我一直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; }