# CSPT21 Lecture 3 ## [Single Number](https://leetcode.com/problems/single-number/) ``` class Solution: """ [2,2,3,1,3] --> 1 [1] --> 1 Plan Use a dictionary to keep track of how many times an element occurs in the list (element --> numTimesAppeared). Iterate through the dictionary, return the element that appears once. Runtime: O(n) Space: O(n) """ def singleNumber(self, nums: List[int]) -> int: counts = {} for num in nums: if num not in counts: counts[num] = 1 else: counts[num] += 1 for (num, numTimesAppeared) in counts.items(): if numTimesAppeared == 1: return num return -1 ``` ## [Two Sum](https://leetcode.com/problems/two-sum/) ``` class Solution: """ Understand [3,5,2,1] target = 5 output = [0, 2] [2,1] target = 3 output = [0,1] Plan Approach 1: Runtime O(n^2) Space O(1) For each number in nums, look in nums again to see if it has its complement Approach 2: Runtime O(n) Space O(n) Use a dictionary to store the current number --> its index (if it doesn't have a complement). If the current number's complement is in the dictionary then return the indices you're currently at and the index stored in the dictionary """ def twoSum(self, nums: List[int], target: int) -> List[int]: numsDictionary = {} for (i, num) in enumerate(nums): if target - num in numsDictionary: return [numsDictionary[target - num], i] numsDictionary[num] = i def twoSumApproach1(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] ```