剑走偏锋吧,每次遍历 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