一:解题思路
Time:O(n^2),Space:O(1)
二:完整代码示例 (C++版和Java版)
C++:
class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> result; sort(nums.begin(),nums.end()); for (int k = nums.size()-1; k >= 2; k--) { if (nums[k] < 0) break; int target = -nums[k]; int i = 0, j = k - 1; while (i < j) { if (nums[i] + nums[j] == target) { vector<int> elem; elem.push_back(nums[i]); elem.push_back(nums[j]); elem.push_back(nums[k]); result.push_back(elem); while (i < j && nums[i] == nums[i + 1]) i++; while (i < j && nums[j] == nums[j - 1]) j--; i++; j--; } else if (nums[i] + nums[j] < target) { i++; } else { j--; } } while (k >= 2 && nums[k] == nums[k - 1]) k--; } return result; } };
Java:
class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> result=new ArrayList<>(); Arrays.sort(nums); for(int k=nums.length-1;k>=2;k--) { if(nums[k]<0) break; int targrt=-nums[k]; int i=0,j=k-1; while (i<j) { if(nums[i]+nums[j]==targrt) { result.add(Arrays.asList(nums[i],nums[j],nums[k])); while(i<j && nums[i]==nums[i+1]) i++; while (i<j && nums[j]==nums[j-1]) j--; i++; j--; } else if(nums[i]+nums[j]<targrt) { i++; } else { j--; } } while(k>=2 && nums[k]==nums[k-1]) k--; } return result; } }
原文:https://www.cnblogs.com/repinkply/p/12656002.html