File tree Expand file tree Collapse file tree
longest-consecutive-sequence Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments