leetcode-三数之和

时间:2021-07-15
本文章向大家介绍leetcode-三数之和,主要包括leetcode-三数之和使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {

        vector<vector<int>> res;

        if(nums.size()<3)
            return res;
        sort(nums.begin(), nums.end());

        for(int i = 0; i < nums.size(); i++){
            
            if(nums[i]>0) 
                break;
            if((i-1)>=0&&nums[i] == nums[i-1])   //  后面的元素和前面的重复,直接跳过
                continue;

            int m = i+1;
            int n = nums.size()-1;
  
            while(m<n){
                if(nums[m]+nums[n]>(-nums[i]))
                    n--;
                else if(nums[m]+nums[n]<(-nums[i]))
                    m++;
                else{
                    vector<int> temp;
                    while(m<n&&nums[m+1]==nums[m])  // 右边如果有重复元素直接左移一位
                        m++;
                    while(m<n&&nums[n-1] == nums[n]) // 左边有重复元素直接右移一位
                        n--;
                    temp.push_back(nums[i]);
                    temp.push_back(nums[m]);
                    temp.push_back(nums[n]);
                    res.push_back(temp);
                    m++;
                    n--;
                }
            }

            
        }  
        return res;  
    }
};

原文地址:https://www.cnblogs.com/ymec/p/15014738.html