在不改变函数主体的情况下求向量中所有和为15的元素次数,我发现子向量会重复计算
int listAllFifteens(Vector & cards) {
// TODO: Delete this line and the next two lines, then implement this wrapper function.
int sum=0;
Vector<int> a={0,0,0,0,0};
int len=cards.size();
for(int i=0;isum+=currentcard.getRank();
}
if (sum<=15) {
return sum==15 ?1:0;
}else {
for(int j=0;j0];
cards.remove(0);
a[j]=listAllFifteens(cards);
cards.add(x);
}
}
return a[0]+a[1]+a[2]+a[3]+a[4];
}
思路+解法
排序+双指针 O(n^2)
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
int size = nums.size();
sort(nums.begin(), nums.end());
vector<vector<int>> ans;
for(int i = 0; i < size; i++){
//第一个元素大于0的剪枝很巧妙
if(nums[i] > 0) return ans;
//去重
if(i > 0 && nums[i] == nums[i-1]) continue;
int j = i + 1, k = size - 1;
while(j < k){
if(nums[j] + nums[k] == -nums[i]){
ans.push_back({nums[i], nums[j], nums[k]});
j++;
k--;
//去重
while(j < k && nums[j] == nums[j - 1]) j++;
while(j < k && nums[k] == nums[k + 1]) k--;
}
else if(nums[j] + nums[k] > -nums[i]){
k--;
}
else if(nums[j] + nums[k] < -nums[i]){
j++;
}
}
}
return ans;
}
};