剑指Offer-Python-牛客网

面试题57.1:和为S的两个数字

2019-01-16  本文已影响0人  凌霄文强

题目描述

输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

输出描述:
对应每个测试案例,输出两个数,小的先输出。

知识点

数组


Qiang的思路

对于这个问题,只需要设置两个指针,一个指向数组的最左边,一个指向最右边,然后判断两个数的和和S是不是相等,如果相等的话就是要求的解。如果和大于S,说明最大值太大了,只需要将右边的指针往前走。如果小的话就需要将左边的指针往后走。如果两个指针的相对位置发生了改变,就说明并不存在题目要求的两个数,这时返回一个空个list即可。

# -*- coding:utf-8 -*-
class Solution:
    def FindNumbersWithSum(self, array, tsum):
        # write code here
        left=0
        right=len(array)-1
        while left<right:
            if array[right]+array[left]==tsum:
                return [array[left], array[right]]
            elif array[right]+array[left]>tsum:
                right-=1
            else:
                left+=1
        return []

作者原创,如需转载及其他问题请邮箱联系:lwqiang_chn@163.com
个人网站:https://www.myqiang.top

上一篇 下一篇

猜你喜欢

热点阅读