1. 程式人生 > >leetcode 1. Two Sum(兩數之和)

leetcode 1. Two Sum(兩數之和)

解題方案

思路 1 ******- 時間複雜度: O(N^2)******- 空間複雜度: O(1)******

暴力解法,兩輪遍歷

beats 27.6%

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        for i in range(len(nums)):
            for j in range(i+1, len(nums)):
                if nums[i] + nums[j] == target:
                    return [i, j]

思路 2 ******- 時間複雜度: O(N)******- 空間複雜度: O(N)******

上面的思路1太慢了,我們可以犧牲空間換取時間

          2        7        11    15
         不存在   存在之中
lookup   {2:0}    [0,1]
  • 建立字典 lookup 存放第一個數字,並存放該數字的 index
  • 判斷 lookup 種是否存在: target - 當前數字, 則表面 當前值和 lookup中的值加和為 target.
  • 如果存在,則返回: target - 當前數字
     的 index 和 當前值的 index

beats 100%

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        lookup = {}
        for i, num in enumerate(nums):
            if target - num in lookup:
                return [lookup[target-num], i]
            else:
                lookup[num] = i

來源:https://github.com/apachecn/awesome-algorithm/tree/master/docs/Leetcode_Solutions/Python

備註:若有不懂,請新增群號812791932,有小哥哥,小姐姐的耐心解答么