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