zoukankan      html  css  js  c++  java
  • 【medium】15. 3sum

    Given an array nums of n integers, are there elements abc in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

    Note:

    The solution set must not contain duplicate triplets.

    Example:

    Given array nums = [-1, 0, 1, 2, -1, -4],
    
    A solution set is:
    [
      [-1, 0, 1],
      [-1, -1, 2]
    ]


    class Solution {
    public:
        vector<vector<int>> threeSum(vector<int>& nums) {
            sort(nums.begin(), nums.end()); //使用有序数组,处理重复
            
            vector<vector<int>> ans;
            
            int len = nums.size();
            int start, end, target;
            
            for (int i=0; i<len; i++){
                //利用有序数组,去掉重复的第三个数,在剩下的数里找two sum
                if (i>0 && nums[i] == nums[i-1])  
                    continue;
                
                start = i+1;
                end = len-1;
                target = 0-nums[i];
                
                // two sum
                while (start < end){
                    // start 位置起始有重复
                    if (start > i+1 && nums[start-1]==nums[start]){
                        start ++;
                        continue;
                    }
                    if (nums[start] + nums[end] == target){
                        vector<int> a;
                        a.push_back(nums[start]);
                        a.push_back(nums[end]);
                        a.push_back(-target);
                        ans.push_back(a);
                        start ++; // wrong
                    }
                    else if (nums[start] + nums[end] > target)
                        end --;
                    else
                        start ++;
                    
                }    
            }
            return ans;
        }
    };
  • 相关阅读:
    HDU 1097
    HDU 1045
    HDU 1039 -Easier Done Than Said?
    HDU 1038
    HDU 1037 - Keep on Truckin'
    HDU 1036 - Average is not Fast Enough!
    hdu 1701 ACMer
    hdu 1711 Number Sequence(kmp)
    hdu 2087 剪花布条
    字符串匹配-KMP算法学习笔记
  • 原文地址:https://www.cnblogs.com/sherry-yang/p/10803921.html
Copyright © 2011-2022 走看看