>

LoeiJe

:D 获取中...

何以解忧?唯有暴富

leetcode-18

leetcode 18

为啥不想清楚了在写呢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
int a, b, c, d, aux;
vector<vector<int>> ans;
if(nums.size() < 4) return ans;
sort(nums.begin(), nums.end());
a = 0; b = a + 1; c = b +1; d = nums.size() - 1;
for(a = 0; a < nums.size() - 3; ++a) {
if(a > 0 && nums[a] == nums[a - 1]) continue; // 开始移动后 进行去除重复 确保改变了a
for(b = a + 1; b < nums.size() - 2; ++b) {
if(b > a + 1 && nums[b] == nums[b - 1]) continue; // 开始移动后 进行去除重复 确保改变了b
c = b + 1; d = nums.size() - 1;
while(c < d) {
aux = nums[a] + nums[b] + nums[c] + nums[d];
if(aux > target) { // 比目标值大 减小值
--d;
}
else if(aux < target) // 比目标值小 增大值
++c;
else {
ans.push_back(vector<int>{nums[a], nums[b], nums[c], nums[d]});
while(c < d && nums[c] == nums[c + 1]) ++c; // 先计算 然后去除重复
while(c < d && nums[d] == nums[d - 1]) --d; // 先计算 然后去除重复
++c;--d; // 移动下一个
}
}
}
}
return ans;
}
};