zoukankan      html  css  js  c++  java
  • leetcode -- 3sum

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

    Note:

    • Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
    • The solution set must not contain duplicate triplets.
        For example, given array S = {-1 0 1 2 -1 -4},
    
        A solution set is:
        (-1, 0, 1)
        (-1, -1, 2)

    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    
    class Solution {
        vector<vector<int> > ret;
    public:
        void helper(vector<int> &num,vector<int>::size_type  base)
        {
          vector<int>::size_type  left = base + 1;
          vector<int>::size_type  right = num.size() - 1;
          int com = num[base] * (-1);
    
          while(left < right)
          {
            int temp = num[left] + num[right];
            if( temp > com )
                right--;
            else if(temp < com)
                left++;
            else
                {
                  vector<int> t;
                  t.push_back(num[base]);t.push_back(num[left]);t.push_back(num[right]);
                  ret.push_back(t);
                  right--;left++;
                }
          }
        
        }
        vector<vector<int> > threeSum(vector<int> &num) {
            sort(num.begin(),num.end()); ///进行排序,运用迭代器~
            for(vector<int>::size_type i = 0;i< num.size();i++)
                if(i > 0 && num[i] == num[i -1])
                 continue;
                else 
                 helper(num,i);
            return ret; 
        }
    };
    
    int main()
    {
      vector<int > t;
      t.push_back(-1);t.push_back(0);t.push_back(1);t.push_back(2);t.push_back(-1);t.push_back(-4);
    
      Solution s;
      vector<vector<int> > v = s.threeSum(t);
    
      cout<<v.size();
    }
  • 相关阅读:
    Linux中常用命令
    Shell基本介绍和使用
    linux基本介绍和使用
    Servlet基本介绍和使用
    linux系统下挂载windows共享目录
    linux下关于gz和bz2压缩格式的常用操作技巧
    linux下修改history命令保存条数
    关于在linux下清屏的几种技巧
    vim中如何引用自定义模板文件
    Linux下ps -ef和ps aux的区别及格式详解
  • 原文地址:https://www.cnblogs.com/berkeleysong/p/3754889.html
Copyright © 2011-2022 走看看