【剑指offer】和为S的两个数字

原创 2018年04月15日 14:26:47

题目描述

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


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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38111819/article/details/79949066

剑指Offer面试题41:求和为s的两个数字;求和为s的连续正数序列 Java实现

题目一:输入一个递增排序的数组和一个数字s,在数组中找两个数,使得他们的和刚好是s.如果有多对数字的和等于s,则输出任意一对即可。例如,输入数组{1,2,4,7,11,15}和数字15,则输出4和11...
  • gg543012991
  • gg543012991
  • 2016-09-25 16:40:44
  • 709

剑指Offer面试题41(Java版):和为s的两个数字VS和为s的连续正数序列

题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多个数字的和等于s,输出任意一对即可。 例如输入数组{1,2,4,7,11,15}和数字15.由于4+11...
  • jsqfengbao
  • jsqfengbao
  • 2015-08-10 19:47:11
  • 1548

《剑指offer》和为S的两个数字

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:libin493073668@sina.com】 题目链接:http://www.nowcoder.com/p...
  • libin1105
  • libin1105
  • 2015-09-12 22:48:30
  • 629

《剑指offer》——和为S的两个数字

T: 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述: 对应每个...
  • shansusu
  • shansusu
  • 2015-11-26 19:10:41
  • 378

剑指offer:和为S的两个数字

题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。  输出描述: 对应每个测试案例,输出两个数,小的先...
  • wly_2014
  • wly_2014
  • 2016-03-19 21:58:26
  • 201

[剑指offer]和为S的两个数字

题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。  输出描述: 对应每个测试案例,输出两个数,小的先...
  • sinat_31360161
  • sinat_31360161
  • 2016-05-10 11:07:35
  • 131

剑指offer——和为S的两个数字

题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。  输出描述: 对应每个测试案例,输出两个数,小的先输出。...
  • sinat_24048051
  • sinat_24048051
  • 2017-05-06 15:05:16
  • 80

剑指offer — 和为S的两个数字

输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的 解题思路:使用双指针的方式进行处理 java import jav...
  • sinat_32547403
  • sinat_32547403
  • 2017-12-13 19:17:13
  • 57

剑指offer—和为s的两个数字

题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。import java.util.ArrayList; pu...
  • yiqiqiwww
  • yiqiqiwww
  • 2017-12-11 08:52:08
  • 54

《剑指offer》-和为S的两个数字

题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。  输出描述:小的在前,大的在后。 解法: ...
  • xiaohaijiejie
  • xiaohaijiejie
  • 2016-07-07 08:53:34
  • 226
收藏助手
不良信息举报
您举报文章:【剑指offer】和为S的两个数字
举报原因:
原因补充:

(最多只允许输入30个字)