[알고리즘] LeetCode 1. 두 숫자

LeetCode 1. 두 개의 숫자 (파이썬)

1, 간단한 솔루션

루프 대법에 대한 가장 간단한 2 :

class Solution:
    def twoSum(self, nums: List[int], target: int) -> 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]

그러나 기능, 시간을 열거 쓰기하지 않도록주의 :

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        size = len(nums)
        for i, m in enumerate(nums):
            j = i+1
            while j < size :
                if nums[i] + nums[j] == target:
                    return [i, j]
                else:
                    j+=1

최적화에 이용하여도 2 (다시 루프?)

파이썬 대법은 좋다 : 방법의 사용, 당신은 단지 for 루프는 (그러나 사실에서 파이썬이 우리를 도와 찾을 루프를 할) 문제를 해결할 수있을 것입니다 필요

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            if target-nums[i] in nums:
                if i != nums.index(target-nums[i]):
                    return [i, nums.index(target-nums[i])]

파이썬 사전 3, (생각 알고리즘 해시 테이블)

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        d = {}
        for i in range(len(nums)):
            a = target - nums[i]
            if nums[i] in d:
                return d[nums[i]],i
            else:
                d[a] = i

이해하는 생각 쓰기, 사전 D의 값 쌍 : 의미 {k 개의 V는} nums V의 범위에서 목표 위치 값을 만드는 것이 K입니다. (즉,시 nums [I] = K, nums [V] + NUM [I] = 목표).
사건 이후 상보 위치에서 주 사전 (값) 측을 통과하는 데 필요한 상보 번호 (키) nums 어레이의 엣지 nums 상보의 레코드 번호 = 전에 발견 될 때 나, 자신의 위치 (값)로 복귀하고 난 완료된다.

추천

출처www.cnblogs.com/importGPX/p/11263450.html