剑指offer-和为S的两个数字(python)

思路2:数列满足递增,设两个头尾两个指针i和j,
若ai + aj == sum,就是答案(相差越远乘积越小)
若ai + aj > sum,aj肯定不是答案之一(前面已得出 i 前面的数已是不可能),j -= 1
若ai + aj < sum,ai肯定不是答案之一(前面已得出 j 后面的数已是不可能),i += 1

# -*- coding:utf-8 -*-
class Solution:
    def FindNumbersWithSum(self, array, tsum):
        # write code here
        i=0
        j=len(array)-1
        res=[]
        while i<j:
            if array[i]+array[j]==tsum:
                res.append(array[i])
                res.append(array[j])
                return res
            if array[i]+array[j]>tsum:
                j-=1
            if array[i]+array[j]<tsum:
                i+=1
        return res

思路1:比较垃圾,就是一些逻辑(通用)

# -*- coding:utf-8 -*-
class Solution:
    def FindNumbersWithSum(self, array, tsum):
        # write code here
        res=[]
        d={}
        for i in range(len(array)):
            if tsum-array[i] in array:
                if tsum-array[i]<array[i]:
                    tmp=[tsum-array[i],array[i],tsum-array[i]*array[i]]
                else:
                    tmp=[array[i],tsum-array[i],tsum-array[i]*array[i]]
                res.append(tmp)
        if not res:
            return []
        for i in range(len(res)):
            mini=res[i]
            if res[i][2]<mini[2]:
                mini=res[i]
        return [mini[0],mini[1]]

你可能感兴趣的:(剑指offer)