zoukankan      html  css  js  c++  java
  • [leetcode]3Sum

    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)

    思路1:
    与之前的[leetcode]Two Sum的思路1相似,加一层外循环。时间复杂度为O(n^3)
    思路2:
    与之前的[leetcode]Two Sum的思路1相似,加一层外循环。时间复杂度为O(n^2),思路完全一样,大家可以自己实现一下。
    思路3:
    先对整个数组进行排序,外层循环对每个元素i(i < length - 2)进行遍历,然后在余下的元素(i + 1 ~ length)中采用双指针进行检索,参考原博文[leetcode]3Sum 的讲解
    代码如下:
     1 public class Solution {
     2     public List<List<Integer>> threeSum(int[] num) {
     3         List<List<Integer>> result = new ArrayList<List<Integer>>();
     4         if(num == null || num.length < 3) return result;
     5         Arrays.sort(num);
     6         for(int i = 0; i < num.length; i++){
     7             if(i > 0 && num[i] == num[i - 1]) continue;
     8             int begin = i + 1;
     9             int end = num.length - 1;
    10             while(begin < end){
    11                 if(num[begin] + num[end] + num[i] == 0){
    12                     List<Integer> list = new ArrayList<Integer>();
    13                     list.add(num[i]);
    14                     list.add(num[begin]);
    15                     list.add(num[end]);
    16                     result.add(list);
    17                     begin++;
    18                     end--;
    19                     while(begin < end && num[begin] == num[begin - 1]) begin++;
    20                     while(end > i && num[end] == num[end + 1]) end--;
    21                 }else if(num[begin] + num[end] + num[i] > 0){
    22                     end--;
    23                 }else{
    24                     begin++;
    25                 }
    26             }
    27         }
    28         return result;
    29     }
    30 }



     

  • 相关阅读:
    [Effective C++, 学习总结] 01 视C++为一个语言联邦
    【原创】从“心”开始
    [C++, Basic, 02] 控制对象初始化与析构的顺序
    电信PPPoE拨号失败,获取不到IP
    IPV6学习笔记
    win10提示目前无法访问SmartScreen
    IBM服务器进入IMM
    python把文字转成语音
    python爬虫获取贴吧图片
    ibm x3550更换主板后无法加载系统引导
  • 原文地址:https://www.cnblogs.com/huntfor/p/3841654.html
Copyright © 2011-2022 走看看