3Sum Smaller

要点:类似的题还有lintcode的triangle count

  • i,j,k的规律:i:最外层,每走一步,j要重新来过,j第二层,起始为i+1,k初始取决于题目。主要利用了:

    • [j,k]之间的增序:当k满足条件后,顺序之后的也都满足条件,这时候就可以继续移动j了。
    • 移动j的时候,由于j位置的元素变大了,k在上一轮的位置可以保持住
  • 对于一般的3Sum,用的夹逼法:j和k,k反向移动:当k已经小了,之后的都是小的,所以移动j,否则移动k
  • 对于本题:k已经小了那么所有之前的就都算上了,同时可以试新的j了,而新的j变大,所以只有k更小才可能(上轮的k保持位置)。所以j变大和k变小在一层发生,每次j/k都可以invalidate以前的一些cases
  • triangle count:目标是要找到小于的第三边,如果k从右边界开始,当j变大的时候,k不能继续向左,只能reset到右边界。而k如果向右走,那么当第一个符合条件的时候,k只需继续,因为k左边的都已经必然满足了。
  • 这题最好还是open to 可能性,然后根据题一个一个去验证。

https://repl.it/Ch8x/2

错误点:

  • 优化:如果num[i]*3>=target,可以提前退出,类似Restore IP Addresses
# 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? # Hide Company Tags Google
# Hide Tags Array Two Pointers
# Hide Similar Problems (M) 3Sum (M) 3Sum Closest class Solution(object):
def threeSumSmaller(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
n = len(nums)
count = 0
nums.sort()
for i in xrange(n-2):
if 3*nums[i]>=target:
return count
j,k = i+1, n-1
while j<k:
if nums[i]+nums[j]+nums[k]<target:
count+=k-j
j+=1
else:
k-=1
return count sol = Solution()
assert sol.threeSumSmaller([-2, 0, 1, 3], 2)==2
assert sol.threeSumSmaller([3,1,0,-2], 4)==3

边工作边刷题:70天一遍leetcode: day 79的更多相关文章

  1. 边工作边刷题:70天一遍leetcode: day 89

    Word Break I/II 现在看都是小case题了,一遍过了.注意这题不是np complete,dp解的time complexity可以是O(n^2) or O(nm) (取决于inner ...

  2. 边工作边刷题:70天一遍leetcode: day 77

    Paint House I/II 要点:这题要区分房子编号i和颜色编号k:目标是某个颜色,所以min的list是上一个房子编号中所有其他颜色+当前颜色的cost https://repl.it/Chw ...

  3. 边工作边刷题:70天一遍leetcode: day 78

    Graph Valid Tree 要点:本身题不难,关键是这题涉及几道关联题目,要清楚之间的差别和关联才能解类似题:isTree就比isCycle多了检查连通性,所以这一系列题从结构上分以下三部分 g ...

  4. 边工作边刷题:70天一遍leetcode: day 85-3

    Zigzag Iterator 要点: 实际不是zigzag而是纵向访问 这题可以扩展到k个list,也可以扩展到只给iterator而不给list.结构上没什么区别,iterator的hasNext ...

  5. 边工作边刷题:70天一遍leetcode: day 101

    dp/recursion的方式和是不是game无关,和game本身的规则有关:flip game不累加值,只需要一个boolean就可以.coin in a line II是从一个方向上选取,所以1d ...

  6. 边工作边刷题:70天一遍leetcode: day 1

    (今日完成:Two Sum, Add Two Numbers, Longest Substring Without Repeating Characters, Median of Two Sorted ...

  7. 边工作边刷题:70天一遍leetcode: day 70

    Design Phone Directory 要点:坑爹的一题,扩展的话类似LRU,但是本题的accept解直接一个set搞定 https://repl.it/Cu0j # Design a Phon ...

  8. 边工作边刷题:70天一遍leetcode: day 71-3

    Two Sum I/II/III 要点:都是简单题,III就要注意如果value-num==num的情况,所以要count,并且count>1 https://repl.it/CrZG 错误点: ...

  9. 边工作边刷题:70天一遍leetcode: day 71-2

    One Edit Distance 要点:有两种解法要考虑:已知长度和未知长度(比如只给个iterator) 已知长度:最好不要用if/else在最外面分情况,而是loop在外,用err记录misma ...

随机推荐

  1. fibonacci封闭公式及矩阵连乘

    Description The Fibonacci sequence is the sequence of numbers such that every element is equal to th ...

  2. JDK动态代理的实现及原理

    Proxy.newProxyInstance(classloader,Class,invocationHandler) 调用getProxyClass0(loader, interfaces)生成代理 ...

  3. pbfunc外部函数扩展应用-直接在Datawindow中生成QR二维码,非图片方式

    利用pbfunc外部函数在Datawindow中直接生成QR二维码,非图片方式.需要注意以下面几点: Datawindow的DataObject的单位必须为像素(Pixels). Datawindow ...

  4. 多准则决策模型-TOPSIS方法

    多准则决策–Multiple Criteria Decision Making 多准则决策–Multiple Criteria Decision Making 多准则决策是指在具有相互冲突.不可共度的 ...

  5. Java中的Set集合接口实现插入对象不重复的原理

    在java的集合中,判断两个对象是否相等的规则是: 1).判断两个对象的hashCode是否相等 .      如果不相等,认为两个对象也不相等,完毕       如果相等,转入2)(这一点只是为了提 ...

  6. ASP.NET Web API 通过Authentication特性来实现身份认证

    using System; using System.Collections.Generic; using System.Net.Http.Headers; using System.Security ...

  7. WebForm(ASP开发方式,IIS服务器、WebForm开发基础)

    一.B/S和C/S 1.C/S C/S 架构是一种典型的两层架构,其全程是Client/Server,即客户端服务器端架构,其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据 ...

  8. TSQL生成Combguid

    Nhibernate实现combguid /// <summary> /// Generate a new <see cref="Guid"/> using ...

  9. javascript作用域链学习笔记

    作用域链 "JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里." --权威指南 在JavaScript中,一切皆对象,包括函数.函数对象和其它对象 ...

  10. 详解Paint的setMaskFilter(MaskFilter maskfilter)

    一.setMaskFilter(MaskFilter maskfilter) setMaskFilter(MaskFilter maskfilter)是paint中的方法,它可以用来对图像进行一定的处 ...