今天笔试遇到的一个算法题
假设我有一些已经排序数字,比如1、3、4、5、8、9、13等等,求一个算法,能从其中找出两个数,让他们的和为某一个确定的数,如果第一次找到,就可以停止了。要求算法复杂度为O(n)。求思路啊!
[解决办法]
设数组从小到大排序
两个指针一头一尾,求和,偏小就左指针后移,偏大就右指针前移,直到找到或两指针碰头宣布找不到
[解决办法]
用2个标志位,一个在开始,一个在结尾。
假设确定的数位M
开始的标志位开始走,比如取到1,那么结尾的标志从结尾向开始走,如大于M,接着向开始走,如小于M,结尾的标志暂停,说明1无法找到其他数与之和为M. 那么开始标志位接着走去尝试找后面的数字,按照刚才描述的方法移动结尾的标志位。
直到找到一对 或者 2个标志位相等且没找到 为止。