--- title: '1. Two Sum' description: You are given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target icon: dot sidebar: label: 'Two Sum' badge: 'Easy' --- Array ::::warning Can you come up with an algorithm that is less than O(n^2) time complexity? :::: ### Example 1: - Input: `nums = [2,7,11,15], target = 9` - Output: `[0,1]` - Explanation: Because `nums[0] + nums[1]` == `9`, we return [0, 1]. ### Example 2: - Input: `nums = [3,2,4], target = 6` - Output: `[1,2]` ### Example 3: - Input: `nums = [3,3], target = 6` - Output: `[0,1]` ### Constraints: - `2 <= nums.length <= 10^4` - `-10^9 <= nums[i] <= 10^9` - `-10^9 <= target <= 10^9` - Only one valid answer exists. ## Approach ```mermaid flowchart TD S(["twoSum(nums, target)"]) --> I["seen = {} — value to index"] I --> L{"more (i, num) in nums?"} L -- no --> E(["return []"]) L -- yes --> C["complement = target - num"] C --> H{"complement in seen?"} H -- yes --> R(["return [seen[complement], i]"]) H -- no --> W["seen[num] = i"] W --> L ``` ## Solution ```py class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: seen = {} for i, num in enumerate(nums): complement = target - num if complement in seen: return [seen[complement], i] seen[num] = i return [] ``` ## Explanation