File tree Expand file tree Collapse file tree 5 files changed +162
-0
lines changed
longest-consecutive-sequence Expand file tree Collapse file tree 5 files changed +162
-0
lines changed Original file line number Diff line number Diff line change
1
+ // ํ์ด
2
+ // map์ผ๋ก ์ค๋ณต๋ ๊ฐ์ด ์๋์ง ์ฒดํฌ
3
+
4
+ // TC
5
+ // ์ค๋ณต์ด ํ๋๋ ์๋ ๊ฒฝ์ฐ์ ์ต๋ n๋ฒ ์กฐํ
6
+ // n๋ฒ ๋ฐ๋ณต์ ์ด ์์
์ ๋ณต์ก๋๋ O(n)
7
+
8
+ // SC
9
+ // n๊ฐ์ ์ซ์๋ฅผ ์ ์ฅํ๋ฉด map์ด ์ฌ์ฉํ๋ ๊ณต๊ฐ์ ์ต๋ O(n)
10
+
11
+ // (+) ์ ๋ ฌ์ ์ฌ์ฉํ๋ค๋ฉด?
12
+ // ์
๋ ฅ๋ ๋ฐฐ์ด์ ์ ๋ ฌํด์ ์๋ก ์ธ์ ํ ๊ฐ์ ๋น๊ตํ๋ฉด O(1)์ SC๋ก ์ค๋ณต ํ์ธ ๊ฐ๋ฅ.
13
+ // ๊ทธ๋ฌ๋ ์ ๋ ฌ์ ์ฌ์ฉํ๋ฉด TC๊ฐ O(nlogn).
14
+
15
+ func containsDuplicate (nums []int ) bool {
16
+ m := make (map [int ]int )
17
+ for _ , num := range nums {
18
+ if _ , ok := m [num ]; ok {
19
+ return true
20
+ }
21
+ m [num ] = num
22
+ }
23
+ return false
24
+ }
Original file line number Diff line number Diff line change
1
+ // ํ์ด
2
+ // dp๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ ํธ ์ ์๋ ์ต๋ํ์ ๋์ ๊ณ์ฐ
3
+ // curr์ด prev๊ฐ ๋๊ณ , prev์๋ ๊ฐ์ด ์๋ก์ด ๊ฐ์ ๋ํ ๊ฒ๊ณผ curr ์ด์๋ ๊ฐ์ ์ต๋๊ฐ์ ๋น๊ตํ ๊ฒ์ด ์๋ก์ด curr์ด ๋๋ค.
4
+ // ๋ง์ง๋ง์ prev์ curr์ ์ต๋๊ฐ์ ๋น๊ต
5
+ // ์ด๋ ๊ฒ ํ๋ฉด ํธ ์ ์๋ ์ง์ ์ต๋๊ฐ์ ๊ณ์ ๊ฐ์ง๊ณ ์์ ์ ์๊ฒ ๋จ.
6
+
7
+ // TC
8
+ // O(n)
9
+
10
+ // SC
11
+ // ๋์ด๋์ง ์๋ int ๊ฐ๋ง ์ฌ์ฉํ์ผ๋ฏ๋ก O(1)
12
+
13
+ func rob (nums []int ) int {
14
+ length := len (nums )
15
+
16
+ if length == 1 {
17
+ return nums [0 ]
18
+ }
19
+
20
+ prev := 0
21
+ curr := nums [0 ]
22
+
23
+ for i := 1 ; i < length ; i ++ {
24
+ prev , curr = curr , max (nums [i ]+ prev , curr )
25
+ }
26
+
27
+ return max (prev , curr )
28
+ }
29
+
30
+ func max (a , b int ) int {
31
+ if a > b {
32
+ return a
33
+ } else {
34
+ return b
35
+ }
36
+ }
Original file line number Diff line number Diff line change
1
+ // ํ์ด
2
+ // You must write an algorithm that runs in O(n) time.
3
+ // TC๋ฅผ O(n) ์ด๋ด๋ก ํด์ผํ๋ค๋ ๊ฒ์ sort๋ฅผ ์ฐ์ง ๋ง๋ผ๋ ์๋ฏธ.
4
+ // map์ ์ฌ์ฉํ๊ณ ์ํํ๋ฉฐ ์ฐ์์ด ์์๋๋ ๊ฐ์ ์ฐพ๊ณ ์ฐพ์ผ๋ฉด ์ฐ์๋๋์ง ์ฐพ๊ธฐ.
5
+
6
+ // TC
7
+ // ์ํํ๋ map์์์ for๋ฌธ์ ๋ ํธ์ถํ๊ธด ํ์ง๋ง,
8
+ // ๋ชจ๋ ๊ฐ์ด ์ฐ์๋๋ ๊ฐ์ด๋ผ๊ณ ํ์ ๋
9
+ // ์ฐ์์ด ์์๋๋ ๊ฐ ์ธ์๋ ํ ๋ฒ์ฉ ๋ฐ๋ก ์ง๋๊ฐ๊ฒ ๋๊ณ (n*1), ์์๋๋ ๊ฐ๋ถํฐ ์ฐ์์ด ๋๋๋ ์์ ๊น์ง n๋ฒ์ด๋ผ(1*n)
10
+ // O(n+n) ์ด๊ธฐ ๋๋ฌธ์ TC๋ O(n)
11
+
12
+ // SC
13
+ // map์ด ์ต๋๋ก ์ฐจ์งํ๋ ๊ณต๊ฐ์ O(n)
14
+
15
+ func longestConsecutive (nums []int ) int {
16
+ m := make (map [int ]bool )
17
+ for _ , num := range nums {
18
+ m [num ] = true
19
+ }
20
+ length := 1
21
+ maxLength := 0
22
+ for k := range m {
23
+ if _ , ok := m [k - 1 ]; ! ok {
24
+ i := 1
25
+ for {
26
+ if _ , ok := m [k + i ]; ok {
27
+ length ++
28
+ i ++
29
+ } else {
30
+ break
31
+ }
32
+ }
33
+ if maxLength < length {
34
+ maxLength = length
35
+ }
36
+ length = 1
37
+ }
38
+ }
39
+ return maxLength
40
+ }
Original file line number Diff line number Diff line change
1
+ // ํ์ด
2
+ // map์ผ๋ก ์
๋ ฅ ์ซ์๋ค์ด ๊ฐ๊ฐ ๋ช๋ฒ ๋ฐ๋ณต๋๋์ง ์ ๋ฆฌ
3
+ // [][]int๋ฅผ ์ ์ธํ๊ณ ๋ฐ๋ณต๋ ํ์๋ฅผ index๋ก, ์
๋ ฅ ์ซ์๊ฐ์ ๋ฐฐ์ด์ appendํ๋ค.
4
+ // ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด์ ์ญ์์ผ๋ก ์ํํ๋ฉฐ k๊ฐ์ element๋ฅผ ๊ฐ์ง ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ๋ง๋ ๋ค.
5
+
6
+ // TC
7
+ // O(n)
8
+
9
+ // SC
10
+ // ๋ชจ๋ ์ซ์๊ฐ ๋ค๋ฅด๋ค๊ณ ํด๋ ๊ฐ ์ซ์๋ ํ๋์ ํ์๋ฐฐ์ด์๋ง ์ํ๋ค. ๋ฐ๋ผ์ O(n)
11
+
12
+ func topKFrequent (nums []int , k int ) []int {
13
+ m := make (map [int ]int )
14
+ for _ , num := range nums {
15
+ m [num ]++
16
+ }
17
+ a := make ([][]int , len (nums )+ 1 )
18
+ for key , num := range m {
19
+ a [num ] = append (a [num ], key )
20
+ }
21
+ result := make ([]int , 0 )
22
+ for i := cap (a ) - 1 ; i >= 0 ; i -- {
23
+ if len (a [i ]) > 0 {
24
+ result = append (result , a [i ]... )
25
+ }
26
+ if len (result ) == k {
27
+ break
28
+ }
29
+ }
30
+ return result
31
+ }
Original file line number Diff line number Diff line change
1
+ // ํ์ด
2
+ // ์ ํจํ string ๊ฐ๋ง ์ ์ ํ๊ณ palindrome check.
3
+
4
+ // TC
5
+ // ์
๋ ฅ๋ string์ ๊ธธ์ด์ ๋ฐ๋ผ ์ต๋ O(n)
6
+
7
+ // SC
8
+ // validStr์ผ๋ก ์ ํจํ string์ ์ ์ ํ๊ธฐ ๋๋ฌธ์ ์ต๋ O(n)
9
+
10
+ // (+) ์
๋ ฅ๋ string์ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ๊ฐ์ ํ๋ฉด SC๊ฐ O(1)
11
+
12
+ func isPalindrome (s string ) bool {
13
+ s = strings .ToLower (s )
14
+ validStr := ""
15
+ for _ , str := range s {
16
+ if ('a' > str || 'z' < str ) && ('0' > str || '9' < str ) {
17
+ continue
18
+ }
19
+ validStr += string (str )
20
+ }
21
+ if len (validStr ) <= 1 {
22
+ return true
23
+ }
24
+ l := len (validStr )
25
+ for i := 0 ; i < l / 2 ; i ++ {
26
+ if validStr [i ] != validStr [l - 1 - i ] {
27
+ return false
28
+ }
29
+ }
30
+ return true
31
+ }
You canโt perform that action at this time.
0 commit comments