1. 程式人生 > >LeetCode 3Sum

LeetCode 3Sum

leetCode 3sum問題,和LeetCode第一個Two Sum問題很像,首先對陣列nums進行排序,然後從第一個開始,將值設為類似於Two Sum的target,然後按照首尾查詢的方法,時間複雜度很快。另外需要注意的是nums中重複的要注意忽略掉。

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        vector<vector
<int>
>
results; int a; int sum; for (int i=0; i<nums.size(); ++i) { if (i>0 && nums[i]==nums[i-1]) continue; a = nums[i]; int begin = i+1; int end = nums.size()-1; while (begin < end) { sum = nums[begin] + nums[end]; if
(sum + a > 0) --end; else if (sum + a < 0) ++begin; else { results.push_back(vector<int>{nums[i], nums[begin], nums[end]}); while (nums[begin] == nums[begin+1]) ++begin; while (nums[end] == nums[end-1
]) --end; ++begin; --end; } } } return results; } };