难点在于不能有重复。
开始的思路是先两两求和,然后对得到的新序列求2Sum,但是很难排重。本想利用set<set<int>>排重,结果因为stl内部实现机制,应该是做不到。
可行的思路是,外层暴力fix前两个数,内层一个循环固定后两个数。还是注意排重。
class Solution { public: vector<vector<int>> fourSum(vector<int>& n, int target) { vector<vector<int>> ans; int l,r,len=n.size(); vector<int> temp; sort(n.begin(),n.end()); for(int i=0;i<len-3/*&&n[i]*4<=target*/;){ for(int j=i+1;j<len-2;){ l=j+1;r=len-1; while(l<r){ if(n[i]+n[j]+n[l]+n[r]>target) r--; else if(n[i]+n[j]+n[l]+n[r]<target) l++; else { temp.push_back(n[i]); temp.push_back(n[j]); temp.push_back(n[l]); temp.push_back(n[r]); ans.push_back(temp); temp.clear(); l++; while(n[l]==n[l-1]) l++; } }//else j++; while(n[j]==n[j-1]) j++; }//for j i++; while(n[i]==n[i-1]) i++; }//for i return ans; } };
本文深入探讨了解决四数之和问题的有效算法。通过详细分析,文章提出了一种通过固定前两个数并使用双指针技巧来寻找其余两数的方法,确保了结果的唯一性和避免重复解。此算法首先对数组进行排序,然后通过内外层循环和条件判断,高效地找到所有可能的四数组合,其和等于目标值。
801

被折叠的 条评论
为什么被折叠?



