Python, C++, JavaScript, SQL 및 TypeScript의 다양한 LeetCode 솔루션을 살펴보세요. 여러 프로그래밍 언어로 인터뷰 준비, 학습 및 코드 연습에 적합합니다. Github 레포 링크
목차
비녀장쉬운
정수 배열이 주어지면 숫자
그리고 정수 목표
, 반품 두 숫자의 인덱스는 다음과 같습니다. 목표
.
각 입력이 다음과 같다고 가정할 수 있습니다. 정확히 하나의 솔루션을(를) 사용할 수 없습니다. 같은 요소를 두 번.
어떤 순서로든 답변을 반환할 수 있습니다.
예시 1:
입력: 숫자 = [2,7,11,15], 대상 = 9 산출: [0,1] 설명: nums[0] + nums[1] == 9이므로 [0, 1]을 반환합니다.
예 2:
입력: 숫자 = [3,2,4], 대상 = 6 산출: [1,2]
예시 3:
입력: 숫자 = [3,3], 대상 = 6 산출: [0,1]
제약:
2 <= 숫자.길이 <= 10 4
-10 9 <= 숫자[i] <= 10 9
-10 9 <= 목표 <= 10 9
- 유효한 답은 하나만 존재합니다.
후속 조치: 보다 작은 알고리즘을 생각해 낼 수 있습니까? 오(n 2 )
시간복잡도?
파이썬
입력에서 가져오기 목록 # 무차별 대입 # 시간 복잡도: O(n^2) # 공간 복잡도: O(1) 클래스 솔루션: 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[j] == target - nums[i]: return [i, j] # hashMap # 시간 복잡도: O(n) # 공간 복잡도: O(1) 클래스 Solution(object): def twoSum(self, nums: List[int], target: int) -> List[int]: numMap = {} for i , 열거의 num(nums): 보수 = 대상 - numMap의 보수인 경우 num: return [numMap[complement], i] numMap[num] = i return [] # 두 포인터 # 시간 복잡도: O(n) # 공간 복잡도 : O(1) 클래스 솔루션(객체): def twoSum(self, nums: List[int], target: int) -> List[List[int]]: res = [] left, right = 0, len(nums ) - 1 while (left < right): currSum = nums[left] + nums[right] if currSum < target 또는 (left > 0 and nums[left] == nums[left - 1]): left += 1 elif currSum > target 또는 (right < len(nums)-1 and nums[right] == nums[right + 1]): right -= 1 else: res.append([nums[left], nums[ 오른쪽]]) 왼쪽 += 1 오른쪽 -= 1 return res nums = [2, 7, 11, 15] target = 9 솔루션 = Solution() result = Solution.twoSum(nums, target) print(result)