---
# System prepended metadata

title: CSPT19 Lecture 3

---

# CSPT19 Lecture 3
## [Single Number](https://leetcode.com/problems/single-number/)
```
class Solution:
    """
    Understand
    nums = [2,2,1]
    output = 1
    
    [1]
    output = 1
    
    Plan
    Use a dictionary to keep track of num occurences per element
    element --> numOccurence
    Iterate through dictionary and output element that occurs 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 element, numOccurence in counts.items():
            if numOccurence == 1:
                return element
```
## [Two Sum](https://leetcode.com/problems/two-sum/)
```
class Solution:
    """
    nums = [3,5,2,1] target = 5
    output = [0, 2]
    
    nums = [2,1] target = 3
    output = [0, 1]
    
    nums = [1,2,2,-1] target = 0
    output = [0, 3]
    
    Plan
    Approach 1
    Iterate through all possible pairs and output the pair
    that equals to the target
    Runtime: O(n^2)
    Space: O(1)
    
    Approach 2
    Use a dictionary to keep track of an element seen and its indices
    Runtime: O(n), space: O(n)
    """
    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[i] + nums[j] == target:
                    return (i, j)
        # d = {}
        # for i, num in enumerate(nums):
        #     if target - num in d:
        #         return (d[target - num], i)
        #     d[num] = i
```