파이썬 실습 23: 두 개의 합
의문
정수 배열
nums
및 정수 배열target
이 주어지면target
가 되도록 합니다. 각 입력에는 정확히 하나의 솔루션이 있다고 가정할 수 있습니다.
예시
입력: 숫자 = [2,7,11,15], 대상 = 9
출력: [0,1]
설명: nums[0] + nums[1] == 9이므로 [0, 1]을 반환합니다.
입력: 숫자 = [3,2,4], 대상 = 6
출력: [1,2]
입력: 숫자 = [3,3], 대상 = 6
출력: [0,1]
제약:
2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
내 시도
첫번째 시도
> find the indices of the two number such that they add up to target
>>find two number if they add up to the target
for index1, num1 in the nums:
for index2,num2 in the nums:
if num2 is not the same number as num1:
if value1 + value 2 == target:
return a list consist of index1 and index2
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
final_list = [[index1,index2] for index1,value1 in enumerate(nums) for index2,value2 in enumerate(nums) if index2 > index1 if value1+value2 ==target]
return final_list[0]
두 번째 시도(모든 테스트 통과 성공)
> find the indices of the two number such that they add up to target
>>find two number if they add up to the target
for index1,value1 in nums:
calculate a second_number that have a sum with value equals to target
if second is in nums:
find the indices of the second_number
if the second_number is not the same number as value1:
return a list consist of index1 and index2
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for index1, value1 in enumerate(nums):
second_number = target - value1
if second_number in nums:
second_number_index = nums.index(second_number)
if second_number_index != index1:
return [index1, second_number_index]
기타 솔루션
복잡도가 0(n)인 가장 빠른 알고리즘이라고 주장
> find the indices of the two number such that they add up to target
initiate seen as empty dictionary
for index, value in nums:
calculate a second_number that have a sum with value equals to target
if second_number is in seen dictionary:
return a list of index and the index of second_number
if second_number is not in seen:
add the value as key and index as value in the seen dictionary
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
seen = {}
for index, value in enumerate(nums):
second_number = target - value
if remaining in seen:
return [index, seen[second_number]]
seen[value] = index
내 반성
이것은 for 루프에만 완전히 의존하지 않는 방법을 생각하게 만드는 좋은 도전입니다. 그리고 검색 시간을 줄이기 위해 사전을 사용하는 새로운 패턴을 남들에게서 배운다.
신용 거래
에 도전 leetcode 1
솔루션 사용code recipe
Reference
이 문제에 관하여(파이썬 실습 23: 두 개의 합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mathewchan/python-exercise-23-two-sum-51kg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)