zoukankan      html  css  js  c++  java
  • LeetCode:3Sum

    problem:

    Given an array S of n integers, are there elements a, b, c 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, abc)
    • 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)
    Solution: 先排序 然后左右夹逼 时间复杂度:O(n2)
    class Solution {
    public:
        vector<vector<int>> threeSum(vector<int>& nums) {
             vector<vector<int>> result;
             
             if(nums.size()<3) return result;
             //先排序 然后再左右夹逼
             sort(nums.begin(),nums.end());
             
             const int target=0;
             auto last=nums.end();
             for(auto a=nums.begin();a<prev(last,2);a++)
             {
                      auto b = next(a);
                      auto c= prev(last);
                      
                      while(b<c)
                      {
                        if(*a+*b+*c<target)
                           b++;
                        else if(*a+*b+*c>target)
                         --c;
                         else{
                              
                              result.push_back({*a,*b,*c});
                              ++b;
                              --c;
                              }
                       }
                      
                  }
                  return result;
                  }
    };
  • 相关阅读:
    SpringBoot启动类踩坑
    数组作业
    多态的使用
    intellij idea怎么设置软件启动时选择项目进入
    方法的递归调用
    取一个数字数字后4位的和
    day09作业
    java 随机数
    java 方法
    java 循环作业
  • 原文地址:https://www.cnblogs.com/xiaoying1245970347/p/4552498.html
Copyright © 2011-2022 走看看