---
# System prepended metadata

title: CSPT23 Lecture 3

---

# CSPT23 Lecture 3
## [Single Number](https://leetcode.com/problems/single-number/)
```
class Solution:
    """
    Understand
    
    nums = [2,2,1]
    output = 1
    
    nums = [1]
    output = 1
    
    nums = [4,1,2,1,2]
    output = 4
    
    Plan
    Brute-force
    For each number, check if that number occurs only once
    
    Use a dictionary to keep track of the counts per each element (key = element, value = num times element occurs)
    """
    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, numOccurences) in counts.items():
            if numOccurences == 1:
                return num
```

## [Two Sum](https://leetcode.com/problems/two-sum/)
```
class Solution:
    """
    Plan
    Brute-force
    Generate all pairs until we find the correct one
    
    Optimized
    initialize a dictionary that stores the complement number as the key and the value its index
    iterate for each element and if a complement is found, then output the correct indices
    """
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        d = {}
        for i, num in enumerate(nums):
            if target - num in d:
                return [d[target - num], i]
            d[num] = i
    
    def bruteForcetwoSum(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]
        
        
```