题解 | #和为S的两个数字#

和为S的两个数字

http://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b

剑走偏锋吧,每次遍历 i 再根据二分查找找到 tsum - array[i] 的位标。
最后可能出现查找到与当前i相同位标的情况,将其舍去。
时间复杂度 O(nlogn)
# -*- coding:utf-8 -*-
class Solution:
    def FindNumbersWithSum(self, array, tsum):
        for i in range(len(array)):
            ans = self.midfind(array, 0, len(array)-1,tsum - array[i])
            if ans != -1 and ans != i:
                return [array[i],array[ans]]
        return []
    def midfind(self,data,low,high,val):
        while low <= high:
            mid = (low + high) >> 1
            if data[mid] == val:
                return mid
            if data[mid] > val:
                high = mid-1
            else:
                low = mid + 1
        return -1

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务