Leetcode —— Two Sum

Leetcode —— Two Sum


Problem description link Two Sum


Analyse:
(1)O(nlogn)。排序,然後兩個指針一前一後。因爲題中說明了只有一對答案,因此不需要考慮重複的情況。

Submitted Code*(python)*:

from copy import deepcopy
class Solution:
    # @param {integer[]} nums
    # @param {integer} target
    # @return {integer[]}
    def twoSum(self, nums, target):
        positionRecord = deepcopy(nums)
        nums.sort()
        a, b = self.findSuitableIndices(nums, 0, len(nums)-1, target)
        while(nums[a] + nums[b] != target):
            a ,b = self.findSuitableIndices(nums, a+1, b, target)
        indexa = 0
        indexb = len(nums)-1
        while(positionRecord[indexa] != nums[a]):
            indexa += 1;
        while(positionRecord[indexb] != nums[b]):
            indexb -= 1;
        if indexa <= indexb:
            return (indexa+1, indexb+1)
        return (indexb+1, indexa+1)



    def findSuitableIndices(self, nums, a, b, target):
        for i in range(b, a, -1):
            if nums[a] + nums[i] == target:
                return (a, i)
            if nums[a] + nums[i] < target:
                return (a, i)

Runtime: 93ms


(2)O(n)。哈希表。將每個數字放在map中,歷遍數組,如果出現和數組中的某一個值相加爲target的時候,break。這個方法同樣適用於多組解的情況。

Submitted Code*(python)*:

class Solution:
    # @param {integer[]} nums
    # @param {integer} target
    # @return {integer[]}    
    def twoSum(self, num, target):
        processed = {}
        for i in range(0, len(num)):
            if target-num[i] in processed:
                return [processed[target-num[i]]+1,i+1]
            processed[num[i]]=i

Runtime: 63ms

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章