和为s的两个数字

本文介绍了一种使用双指针技术在已排序数组中查找两个数,使其和等于给定数值S的算法。通过移动左右指针,找到满足条件的数对,并返回乘积最小的一对。此方法适用于处理排序数组,提高搜索效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
由于数组是排序的,采用双指针的方法,如果结果比S小,low + 1,如果比S大,high - 1

class Solution:
    def FindNumbersWithSum(self, array, tsum):
        # write code here
        if len(array) <= 1:
            return []
        low, high = 0, len(array) - 1
        results = []
        while low < high:
            if array[low] + array[high] == tsum:
                results.append([array[low], array[high]])
                low += 1
                high -= 1
            elif array[low] + array[high] < tsum:
                low += 1
            else:
                high -= 1
        if results == []:
            return []
        minMutiple = results[0][0] * results[0][1]
        minindex = 0
        for i, result in enumerate(results):
            if result[0] * result[1] < minMutiple:
                minMutiple = result[0] * result[1]
                minindex = i
        return results[minindex]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值