【剑指offer】和为S的两个数字 -- Python 实现

【题目描述】
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
【解题思路】
首先有一个数学规律,8 = 0+8 = 1+7 = 2+6 = 3+5 = 4+4 , 且 0x8 < 1x7 < 2x6 < 3x5 < 4x4
由于数组是递增的,所以这道题就让两个指针start和end,start从前往后找,end从后往前找,如果在找的过程中,两个指针分别指向的两个数的和为S,就是所要求的结果。
指针的指向规则如下:
如果start和end所指的两个数之和等于S,则返回结果
如果start和end所指的两个数之和大于S,则end向前移
如果start和end所指的两个数之和小于S,则start向后移
用Python实现的代码如下:

# -*- coding:utf-8 -*-
class Solution:
    def FindNumbersWithSum(self, array, tsum):
        # write code here
        start, end = 0, len(array)-1
        while start <= end:
            if array[start] + array[end] == tsum:
                return [array[start] , array[end]]
            elif array[start] + array[end] > tsum:
                end -= 1
            else:
                start += 1
        return []
发布了24 篇原创文章 · 获赞 0 · 访问量 237

猜你喜欢

转载自blog.csdn.net/qq_36643449/article/details/104500525