双指针应用七:三数之和

2021-05-11  本文已影响0人  程一刀

题目地址: https://leetcode-cn.com/problems/3sum/

题目描述: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意: 答案中不可以包含重复的三元组。

参考代码:

/// 三数之和
class Solution1 {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> result;
        //排序
        sort(nums.begin(),nums.end());
        
        if (nums.size() == 0) {
            return  result;
        }
        
        for (int i = 0; i< nums.size(); i++) {
            int left = i+1;
            int right = nums.size()-1;
            
            if (nums[i] > 0) {
                break;
            }
            if (i>0&&nums[i-1] == nums[i]) {
                continue;
            }
            while (left < right) {
                
                if (nums[i] + nums[left] + nums[right] == 0) {
                    vector<int> item = {nums[i],nums[left],nums[right]};
                    result.push_back(item);
                    while (left + 1 < right &&nums[left] == nums[left+1]) {
                        left ++;
                    }
                    while (right - 1 >left &&nums[right] == nums[right-1]) {
                        right--;
                    }
                    left++;
                    right--;
                } else if (nums[i] + nums[left] + nums[right]  > 0 ) {
                    
                    right--;
                } else {
                    left ++;
                }
                
                
            }
        }
        return result;
        
    }
};

参考链接: https://github.com/youngyangyang04/leetcode-master/blob/master/problems/0015.%E4%B8%89%E6%95%B0%E4%B9%8B%E5%92%8C.md

上一篇 下一篇

猜你喜欢

热点阅读