vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> res; sort(nums.begin(),nums.end()); if(nums.size()<3) return res; int len=nums.size(); for(int i=0;i<len;i++){ for(int j=i+1;j<len;j++){ for(int k=j+1;k<len;k++){ if(nums[i]+nums[j]+nums[k]==0){ vector<int> tmp={nums[i],nums[j],nums[k]}; res.push_back(tmp); } } } }修改代码 使用hashmap去重
时间: 2024-02-14 07:28:20 浏览: 82
你可以使用哈希表来去重。以下是修改后的代码:
```cpp
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res;
sort(nums.begin(), nums.end());
int len = nums.size();
for (int i = 0; i < len - 2; i++) {
if (i > 0 && nums[i] == nums[i - 1]) continue; // 去重
unordered_map<int, int> hash; // 使用哈希表记录已经遍历过的数
for (int j = i + 1; j < len; j++) {
int target = -nums[i] - nums[j];
if (hash.count(target) > 0) {
vector<int> tmp = {nums[i], nums[j], target};
res.push_back(tmp);
while (j + 1 < len && nums[j] == nums[j + 1]) j++; // 去重
}
hash[nums[j]] = j;
}
}
return res;
}
```
这样修改后的代码会使用哈希表来记录已经遍历过的数,以避免重复计算相同的组合。同时,也添加了一些额外的条件来进行去重操作。
阅读全文