剑指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]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值