题解 | #和为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

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 18:22
投了几百份简历,专业和方向完全对口,都已读不回。尝试改了一下学校,果然有奇效。
steelhead:这不是很正常嘛,BOSS好的是即便是你学院本可能都会和聊几句,牛客上学院本机会很少了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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