目录
一:题目
二:算法原理
三:代码编写
一:题目
题目链接:. - 力扣(LeetCode)
二:算法原理
该题目的算法原理和三数之和的算法原理极其相似,是在此基础上的进阶,推荐看完三数之和讲解再看此篇文章
三数之和文章链接:CSDN
三:代码编写
class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> ret;//1.排序sort(nums.begin(),nums.end());//2.双指针法for(int i = 0; i <nums.size();)//固定数字a{for(int j = i+1;j < nums.size();)//固定数字b{int left = j+1,right = nums.size()-1;//防止数据溢出long long sum = (long long)target - (nums[i]+nums[j]);//双指针法while(left < right){if(nums[left] + nums[right] < sum){left++;}else if(nums[left] + nums[right] > sum){right--;}else{ret.push_back({nums[i],nums[j],nums[left],nums[right]});left++;right--;//去重一+防止越界while(left < right && nums[left] == nums[left -1]) left++;while(left < right && nums[right] == nums[right+1]) right--;}}//去重二j++;while(j < nums.size()&&nums[j-1] == nums[j]) j++;}//去重三i++;while(i<nums.size() && nums[i] == nums[i-1]) i++;}return ret;}
};