其他算法-042-和爲S的兩個數字(雙指針思想)

題目描述

輸入一個遞增排序的數組和一個數字S,在數組中查找兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。

輸出描述:

對應每個測試案例,輸出兩個數,小的先輸出。

分析

  • 方法一:雙層循環,暴力解法,得到所有兩數之和,時間複雜度爲O(n2n^2)。
  • 方法二:充分利用數組遞增有序的特性,設置兩指針到數組的兩頭,和大了,減小大指針,和小了,增大小指針,相等了返回,兩指針相遇退出循環。同理如果輸出兩個數的乘積最大的,則初始兩指針指向中間兩個數,往兩邊移動即可。

代碼

# -*- 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 []
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章