题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的
思路:
方法一:粗暴遍历法
# -*- coding:utf-8 -*-
class Solution:
def FindNumbersWithSum(self, array, tsum):
# write code here
if not array or not tsum:
return array
for i in range(len(array)):
res = tsum - array[i]
if res in array[0:i]+array[i+1:]:
return [array[i],res]
return []
方法二:数组前后两个指针
# -*- coding:utf-8 -*-
class Solution:
def FindNumbersWithSum(self, array, tsum):
# write code here
if not array or not tsum:
return array
small = 0
big = len(array) - 1
minn = 100000
res = []
cur_sum = array[small] + array[big]
while array[small] < tsum/2:
if cur_sum == tsum:
if minn > array[small]*array[big]:
res = [array[small],array[big]]
minn = array[small]*array[big]
while cur_sum < tsum and array[small] < tsum/2:
small += 1
cur_sum = array[small] + array[big]
if cur_sum == tsum:
if minn > array[small]*array[big]:
res = [array[small],array[big]]
minn = array[small]*array[big]
big -= 1
cur_sum = array[small] + array[big]
return res
本文介绍了一种算法问题,即在一个递增排序的数组中找到两个数,使它们的和等于给定的目标值S,并且这两个数的乘积最小。文中提供了两种解决方案:一种是通过遍历数组来寻找匹配项;另一种是使用双指针技术从前向后查找,以提高效率。

4956

被折叠的 条评论
为什么被折叠?



