问题描述
- 2-sum问题
给定一个序列,计算出这个序列中两个数字相加等于0的个数
假定给出的序列元素不包含0,且唯一 - 3-sum问题
同上,三个数相加等于0
解决方案
2-sum问题
算法第4版P119中提到
先进行排序,如果有这样的两个数字,一定是一个负数和一个正数,找出正数和负数的分界点,对负数集进行判断;用二分法查找负数的绝对值在给定的序列中是否存在,如果存在,则cnt加一,返回cnt;时间复杂度降到了O(nlgn),算法第4版中提到不存在比这时间复杂度更低的算法了
3-sum问题
算法第4版中给出的方法同2-sum问题,在最后一层进行二分查找,时间复杂度为O(n^2lgn)
本文中提到的rank函数见 查找问题