題目描述
輸入一個遞增排序的數組和一個數字S,在數組中查找兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。
輸出描述:
對應每個測試案例,輸出兩個數,小的先輸出。
分析
- 方法一:雙層循環,
暴力解法
,得到所有兩數之和,時間複雜度爲O()。 - 方法二:充分利用
數組遞增有序
的特性,設置兩指針到數組的兩頭
,和大了,減小大指針,和小了,增大小指針,相等了返回,兩指針相遇退出循環。同理如果輸出兩個數的乘積最大
的,則初始兩指針指向中間兩個數
,往兩邊移動即可。
代碼
# -*- coding:utf-8 -*-
class Solution:
def FindNumbersWithSum(self, array, tsum):
# write code here
if not array:
return []
lowP = 0
highP = len(array)-1
while lowP<highP:
if array[lowP]+array[highP]<tsum:
lowP += 1
elif array[lowP]+array[highP]>tsum:
highP -= 1
else:
return array[lowP],array[highP]
return []