三数和的问题,最低时间复杂度也是O(N*N)
/*
* @lc app=leetcode id=15 lang=cpp
*
* [15] 3Sum
*/
// @lc code=start
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
int N = nums.size();
sort(nums.begin(),nums.end());
vector<vector<int>> ans;
for(int i=0;i<N;i++){
int j = i+1;
int k = N-1;
while(j<k){
int now = nums[i] + nums[j] + nums[k];
if( now > 0){
k--;
}else if( now < 0){
j++;
}else{
int a = nums[j], b = nums[k];
vector<int> t = {nums[i],nums[j],nums[k]};
ans.push_back(t);
j++;k--;
while( j<k && nums[j] == a) j++;
while( j<k && nums[k] == b) k--;
}
}
while( i+1<N && nums[i+1] == nums[i]) i++;
}
return ans;
}
};
// @lc code=end
三数和问题解析
本文深入探讨了LeetCode上编号为15的三数和问题,提供了高效的解决方案,使用双指针技巧,将时间复杂度降低到O(N*N),并对算法进行了详细说明。
635

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



