您现在的位置是:首页 >技术交流 >力扣-哈希表-18 四数之和网站首页技术交流
力扣-哈希表-18 四数之和
简介力扣-哈希表-18 四数之和
思路
和《三数之和》类似,也使用类似双指针的操作,重点在去重,细节是多个数目相加需要小心超出范围,强转一下。
代码
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
vector< vector<int> > result;
sort(nums.begin(), nums.end());
if( nums.size() < 4) return result;
for(int i = 0; i < nums.size() - 3; i++){
if(i > 0 && nums[i-1] == nums[i]) continue;
for(int j = i+1; j < nums.size() - 2;j++ ){
if(j > i+1 && nums[j-1] == nums[j]) continue;
int left = j + 1, right = nums.size() - 1;
while(left < right){
long sum = (long)nums[i] + (long)nums[j] + (long)nums[left] + (long)nums[right];
if(sum == target){
vector<int> res = {nums[i], nums[j], nums[left], nums[right]};
while(left+1 < nums.size() && nums[left] == nums[left+1]) left++;
while(right-1 > 0 && nums[right] == nums[right-1]) right--;
left++;
right--;
result.push_back(res);
}else if(sum > target){
right--;
}else{
left++;
}
}
}
}
return result;
}
};
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。