Skip to content

Commit 7b45ab3

Browse files
authored
Merge pull request #2351 from tedkimdev/tedkimdev/week1
[tedkimdev] WEEK 1 Solutions
2 parents 083de6e + 7bb70b8 commit 7b45ab3

5 files changed

Lines changed: 136 additions & 0 deletions

File tree

contains-duplicate/tedkimdev.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// Time complexity: O(n)
2+
// Space complexity: O(n)
3+
func containsDuplicate(nums []int) bool {
4+
seen := map[int]struct{}{}
5+
6+
for _, num := range nums {
7+
if _, ok := seen[num]; ok {
8+
return true
9+
}
10+
seen[num] = struct{}{}
11+
}
12+
return false
13+
}

house-robber/tedkimdev.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Time complexity: O(n)
2+
// Space complexity: O(1)
3+
func rob(nums []int) int {
4+
if len(nums) == 0 {
5+
return 0
6+
}
7+
if len(nums) == 1 {
8+
return nums[0]
9+
}
10+
11+
prevTwo := nums[0]
12+
prevOne := Max(nums[0], nums[1])
13+
14+
for i := 2; i < len(nums); i++ {
15+
// take
16+
m1 := prevTwo + nums[i]
17+
// skip
18+
m2 := prevOne
19+
20+
currentMax := Max(m1, m2)
21+
prevTwo = prevOne
22+
prevOne = Max(currentMax, prevOne)
23+
}
24+
25+
return prevOne
26+
}
27+
28+
func Max(a, b int) int {
29+
if a > b {
30+
return a
31+
}
32+
return b
33+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// Time complexity: O(n)
2+
// Space complexity: O(n)
3+
func longestConsecutive(nums []int) int {
4+
if len(nums) == 0 || len(nums) == 1 {
5+
return len(nums)
6+
}
7+
8+
numSet := map[int]struct{}{}
9+
for _, num := range nums {
10+
numSet[num] = struct{}{}
11+
}
12+
13+
longest := 1
14+
for num := range numSet {
15+
if _, ok := numSet[num-1]; ok {
16+
length := 0
17+
for {
18+
if _, ok := numSet[num+length]; ok {
19+
length++
20+
} else {
21+
break
22+
}
23+
}
24+
longest = Max(length+1, longest)
25+
}
26+
}
27+
28+
return longest
29+
}
30+
31+
func Max(a, b int) int {
32+
if a > b {
33+
return a
34+
}
35+
return b
36+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Time complexity: O(n)
2+
// Space complexity: O(n)
3+
func topKFrequent(nums []int, k int) []int {
4+
countByNum := map[int]int{}
5+
numsByCount := map[int][]int{}
6+
max := 0
7+
8+
for _, num := range nums {
9+
countByNum[num]++
10+
if countByNum[num] > max {
11+
max = countByNum[num]
12+
}
13+
}
14+
15+
for num, count := range countByNum {
16+
if _, ok := numsByCount[count]; ok {
17+
numsByCount[count] = append(numsByCount[count], num)
18+
} else {
19+
numsByCount[count] = []int{num}
20+
}
21+
}
22+
23+
result := []int{}
24+
for i := max; i >= 0; i-- {
25+
nums := numsByCount[i]
26+
result = append(result, nums...)
27+
if len(result) >= k {
28+
break
29+
}
30+
}
31+
32+
return result[:k]
33+
}

two-sum/tedkimdev.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package hello
2+
3+
import "testing"
4+
5+
// Time complexity: O(n)
6+
// Space complexity: O(n)
7+
func twoSum(nums []int, target int) []int {
8+
indexByNum := map[int]int{}
9+
for i, num := range nums {
10+
diff := target - num
11+
if index, ok := indexByNum[diff]; ok {
12+
return []int{index, i}
13+
}
14+
indexByNum[num] = i
15+
}
16+
return []int{}
17+
}
18+
19+
func TestTwoSome(t *testing.T) {
20+
21+
}

0 commit comments

Comments
 (0)