zoukankan      html  css  js  c++  java
  • Sum 总结

    sum无非两种情况,用hashtable 或者用 2 pointer。 Hashtable的时候多不需要考虑重复问题,但是2 pointer往往要考虑重复问题。解决重复问题的方法为初始时判断,如果不是i=0或者nums[i] != nums[i-1],那就跳过。这样保证第一个值不可能是一样的。同理,在loop里面,当target等于和的时候,左右pointer也要先查重。

    1. Two sum

    Given an array of integers, return indices of the two numbers such that they add up to a specific target.

    You may assume that each input would have exactly one solution.

    Example:

    Given nums = [2, 7, 11, 15], target = 9,

    Because nums[0] + nums[1] = 2 + 7 = 9,

    return [0, 1].

    Hashtable 存nums[i], I;

    1. 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: 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]
    ]

    几个关键点:

    可能会有重复,需要logic来去掉重复。

    另一个关键点是本身不sort,需要sort。

    Conditions: sort完最左边大于0或者最右边小于0, 直接return。

    2 pointer的时候注意不是一有结果就break,也可能left往右right往左还有符合的结果。

    while(left<right && nums[left+1] ==nums[left])    left++;

     while(left<right && nums[right-1] ==nums[right])  right--;

    1. 3Sum Smaller

    Given an array of n integers nums and a target, find the number of index triplets i, j, k with 0 <= i < j < k < n that satisfy the condition nums[i] + nums[j] + nums[k] < target.

    For example, given nums = [-2, 0, 1, 3], and target = 2.

    Return 2. Because there are two triplets which sums are less than 2:

    [-2, 0, 1]
    [-2, 0, 3]

    Follow up:
    Could you solve it in O(n2) runtime?

    思路跟3 sum是一样的,只是加的时候, res + = right-left, 因为只要三个和小于target, 那right左边到left的所以都是符合的。

    1. 3Sum Closest

    Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

        For example, given array S = {-1 2 1 -4}, and target = 1.
     
        The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

    这个题也是一样的,只是需要每次判断哪个更小,如果更小,更新res为更小的那个。

    1. 4Sum

    跟3 sum完全一样,多加了一层。需要注意的还是不能重复。

  • 相关阅读:
    Ellipse4SL 的安装包和环境配置要求
    什么是SOHO人
    D2上的Silverlight
    银光团队项目正式启动,欢迎您的参与!
    Silverlight开发团队招募SOHO团员若干
    SOHO新的生活方式
    [银客北京开发团队]承接各种Silverlight和WPF外包项目和合作项目
    微软Silverlight 3.0 概观
    grers
    翻译电文
  • 原文地址:https://www.cnblogs.com/renyualbert/p/6012385.html
Copyright © 2011-2022 走看看