1. 程式人生 > >LeetCode-15. 三數之和

LeetCode-15. 三數之和

題目地址:https://leetcode-cn.com/problems/3sum/
題意:找出不重複的所有的三數之和為0的組合。
思路:排序,列舉第一位,雙指標掃剩下的部分,複雜度O(n^2)
AC程式碼:

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>>ans;
        int n = nums.size();
        sort(nums.begin(),nums.end());
        for(int i=0;i<n-2;i++){
            if(i!=0 && nums[i] == nums[i-1])
                continue;
            if(nums[i]+nums[i+1]+nums[i+2]>0)
                break;
            if(nums[i]+nums[n-1]+nums[n-2]<0)
                continue; 
            int l = i+1;
            int r = n-1;
            int pre = 0x3f3f3f3f;
            while(l<r){
                if(nums[l] == pre){
                    l++;
                    continue;
                }
                int sum = nums[l] + nums[r];
                if(sum+nums[i]>0)
                    r--;
                else if(sum+nums[i]<0)
                    l++;
                else{
                    vector<int>temp;
                    temp.push_back(nums[i]);
                    temp.push_back(nums[l]);
                    temp.push_back(nums[r]);
                    ans.push_back(temp);
                    pre = nums[l];
                    l++;
                    r--;
                }
            }
        }
        return ans;
    }
};