zoukankan      html  css  js  c++  java
  • 3 sum

    3-sum 

      标题叙述性说明:

    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.

    题目要求:

    • 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.

    每一个三元组内的元素是按非递减的顺序存放的,而且结果中要求不含有同样的集合。

    解法:首先是排序。接着要求是不含有同样的集合,显然能够使用set,可是以下的代码所有都避免使用set


    以下一共使用了3种方法:

    法一:DFS。复杂度高。而且在非常小的样例上都超时。


    法二:枚举全部的2-sum和。

    再在数组中查找是否存在另外一个数,使得该3个数的和为0.

    此法不须要使用set,直接就能够得到结果,可是要注意避免反复计算,例如以下两点。


    注1:上述的枚举2-sum时,对于剩下的那个数仅仅须要在 “下标都大于前两者时”进行。

    例如以下例:


    在上图中,当枚举到i和j时,另外一个元素仅仅须要在  图示的 k  范围内枚举就可以。

    注2:假设数组中有大量的反复元素,那么i和j(保持有A[i] == A[j])就仅仅须要考虑一次就可以。

    例如以下例:


    上图中。i 和 j仅仅须要考虑一次, 当 j 移动到 j‘ 的时候,是不须要考虑的,由于与前面的 i 和 j  是反复的。

    代码例如以下:


    时间复杂度为: n^2(logn)

    法三:因为2-sum在数组有序的情况下我们是能够O(n)的时间来解决的。于是直接使用已有的2-sum的代码,代码例如以下:



    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    group_concat的长度限制
    mb_strlen默认字符集问题
    &符号导致的一个bug
    python面向对象编程系列
    python基础之面向过程编程系列
    RPA流程自动化
    什么是DevOps?
    ansible详解
    saas和paas的区别
    CPT/cpt接口
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4612505.html
Copyright © 2011-2022 走看看