二分小用法

来源:互联网 发布:一台机器多个ip linux 编辑:程序博客网 时间:2024/05/01 00:48

1 对于一个序列k1 k2 k3 ……kn
从中 有放回的 不断取出4 个数字 ,问能不能找到至少一种情况 满足 n1+n2+n3+n4==m
二分思想
第一种
移项 m-(n1+n2+n3)==n4
枚举 前三个数字(三层循环来实现),然后用二分查找 原序列中 是不是有m-(n1+n2+n3) (因为这个结果一定为n4 而n4 是一丁在原序列中的) 即可判断 。。 二分的时间复杂度为logn
总时间复杂度就是 n^3*logn

第二种
移项
m-n1-n2==n3+n4 令n3+n4==z 即 m-z1==z2 所以只需要提前预处理出 z序列并且 排好序 就可以用二分了。。
时间复杂度就是 n^2*logn+n^2 ===》 n^2*logn

0 0