和为s的两个数字

冷不防 2022-04-08 15:44 273阅读 0赞

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

  1. class Solution:
  2. def FindNumbersWithSum(self, array, tsum):
  3. # write code here
  4. if len(array) <= 1:
  5. return []
  6. low, high = 0, len(array) - 1
  7. results = []
  8. while low < high:
  9. if array[low] + array[high] == tsum:
  10. results.append([array[low], array[high]])
  11. low += 1
  12. high -= 1
  13. elif array[low] + array[high] < tsum:
  14. low += 1
  15. else:
  16. high -= 1
  17. if results == []:
  18. return []
  19. minMutiple = results[0][0] * results[0][1]
  20. minindex = 0
  21. for i, result in enumerate(results):
  22. if result[0] * result[1] < minMutiple:
  23. minMutiple = result[0] * result[1]
  24. minindex = i
  25. return results[minindex]

发表评论

表情:
评论列表 (有 0 条评论,273人围观)

还没有评论,来说两句吧...

相关阅读

    相关 编程题:s数字

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

    相关 s数字

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