在数组中找出x+y+z=0的组合
2016-11-21 11:43
197 查看
就是找x+y=-z的组合
转化为找出值为-z满足x+y=-z的组合
解法一:
为了查找,首先想到排序,为了后面的二分,nlogn,
然后x+y的组合得n^2的复杂度,加上查找是否为-z,复杂度为nlogn + n^2 * logn
解法二:
还是先从小到大排序 nlogn
假设数组排序后为 a b c d e f
我们还是要找x+y=-z
会发现-z存在的可能只能是a+f和b+e,不会存在a+e和b+f这种情况(这里很重要,保证了算法的正确性),所以两个指针一头一尾往中间扫,肯定能找出来
fist + last < sum 则将fist++,如果fist + last > sum,则last--。这样的话只要对每个进行这种查找就好了
所以复杂度为nlogn+n*n
转化为找出值为-z满足x+y=-z的组合
解法一:
为了查找,首先想到排序,为了后面的二分,nlogn,
然后x+y的组合得n^2的复杂度,加上查找是否为-z,复杂度为nlogn + n^2 * logn
解法二:
还是先从小到大排序 nlogn
假设数组排序后为 a b c d e f
我们还是要找x+y=-z
会发现-z存在的可能只能是a+f和b+e,不会存在a+e和b+f这种情况(这里很重要,保证了算法的正确性),所以两个指针一头一尾往中间扫,肯定能找出来
fist + last < sum 则将fist++,如果fist + last > sum,则last--。这样的话只要对每个进行这种查找就好了
所以复杂度为nlogn+n*n
相关文章推荐
- 微软:找出数组中和为N+1的的组合个数
- 一个数组,找出两数之和为m的所有组合
- 找出数组中和为10的元素的组合
- 试题:找出数组中元素和为指定值的所有组合
- 一个数组,找出两数之和为m的所有组合
- 一个排好序的数组,找出两数之和为M的所有组合
- 一个排好序的数组,找出两数之和为m的所有组合
- 找出数组中满足条件的所有组合!
- 给定一个无序整形数组,找出其中所以三个数之和为0的所有组合
- 如何找出数组中元素之和为特定数的最优组合
- 找出一个字符数组(元素不重复)所有可能字符的组合
- 找出数组中和为N+1的的所有组合
- 一个排好序的数组,找出两数之和为m的所有组合
- 排好序的数组中,找出两数之和为m的所有组合
- 在数组中找出两数之和为10的所有组合(JAVA)
- 从数组中找出所有组合为s的数
- 面试题———关于将一个整型数组中的所有元素组合成一个数字,并找出最小一个。
- 找出一个数组中各个数字出现的次数
- 算法数据结构试题——在数组中找出已知和的组成数
- 要求在长度为100字节的数组中,找出大于42H的无符号数的个数并存 ;入字节单元UP中,找出小于42H的无符号数并存入DOWN中