--- 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 topics: - { name: "Array", slug: "array" } - { name: "Hash Table", slug: "hash-table" } video: "KLlXCFG5TnA" issue: "https://github.com/prdlk/leetcode/issues/29" companies: - { name: "Amazon", period: "Thirty Days", frequency: 100 } - { name: "Google", period: "Thirty Days", frequency: 100 } - { name: "Meta", period: "Thirty Days", frequency: 100 } - { name: "Microsoft", period: "Thirty Days", frequency: 100 } - { name: "tcs", period: "Thirty Days", frequency: 79.6 } - { name: "Ola Cabs", period: "Thirty Days", frequency: 76.7 } - { name: "Bloomberg", period: "Thirty Days", frequency: 69.8 } - { name: "Infosys", period: "Thirty Days", frequency: 68.6 } - { name: "Altimetrik", period: "Three Months", frequency: 100 } - { name: "Capgemini", period: "Three Months", frequency: 100 } - { name: "Microstrategy", period: "Three Months", frequency: 100 } - { name: "MongoDB", period: "Three Months", frequency: 100 } - { name: "Cognizant", period: "Three Months", frequency: 88.7 } - { name: "Apple", period: "Three Months", frequency: 80.4 } - { name: "Barclays", period: "Six Months", frequency: 100 } - { name: "Cisco", period: "Six Months", frequency: 100 } - { name: "Deloitte", period: "Six Months", frequency: 100 } - { name: "Expedia", period: "Six Months", frequency: 100 } - { name: "NetApp", period: "Six Months", frequency: 100 } - { name: "Samsung", period: "Six Months", frequency: 100 } - { name: "Sony", period: "Six Months", frequency: 100 } - { name: "Oracle", period: "Six Months", frequency: 91.2 } - { name: "Qualcomm", period: "Six Months", frequency: 80.7 } - { name: "IBM", period: "Six Months", frequency: 77.2 } - { name: "eBay", period: "Six Months", frequency: 75.2 } - { name: "Walmart Labs", period: "Six Months", frequency: 70.5 } - { name: "Flipkart", period: "Six Months", frequency: 57.1 } - { name: "Goldman Sachs", period: "Six Months", frequency: 44.8 } sidebar: label: 'Two Sum' badge: 'Easy' --- ::::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 [] ```