Skip to content

Commit 1732a3f

Browse files
authored
Merge pull request #871 from anniemon/main
[anniemon78] Week5
2 parents f916b90 + c7ddc3c commit 1732a3f

File tree

4 files changed

+139
-0
lines changed

4 files changed

+139
-0
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/**
2+
* 시간 복잡도: prices.length만큼 순회하므로 O(n)
3+
* 공간 복잡도: 상수 크기의 변수만 사용하므로 O(1)
4+
*/
5+
/**
6+
* @param {number[]} prices
7+
* @return {number}
8+
*/
9+
var maxProfit = function (prices) {
10+
let maxProfit = 0;
11+
let min = prices[0];
12+
13+
for (let i = 0; i < prices.length; i++) {
14+
maxProfit = Math.max(maxProfit, prices[i] - min);
15+
min = Math.min(min, prices[i]);
16+
}
17+
return maxProfit;
18+
};
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
class Solution {
2+
/**
3+
* 시간 복잡도: strs의 길이만큼 순회하므로, O(n)
4+
* 공간 복잡도: 결괏값 제외 추가 변수 사용 없으므로 O(1)
5+
*/
6+
/**
7+
* @param {string[]} strs
8+
* @returns {string}
9+
*/
10+
encode(strs) {
11+
return strs.reduce((acc, cur) => acc+ `${cur.length}` + '!' + cur, '');
12+
}
13+
14+
/**
15+
* 시간 복잡도: str의 길이만큼 순회하므로 str의 길이가 m이면, O(m)
16+
* 공간 복잡도: 결괏값 제외 상수 크기 변수만 사용하므로, O(1)
17+
*/
18+
/**
19+
* @param {string} str
20+
* @returns {string[]}
21+
*/
22+
decode(str) {
23+
const res = [];
24+
let i = 0;
25+
while (i < str.length) {
26+
let j = i;
27+
while (str[j] !== '!') {
28+
j++;
29+
}
30+
const len = Number(str.slice(i, j));
31+
const s = str.slice(j + 1, j + 1 + len);
32+
res.push(s);
33+
i = j + 1 + len;
34+
}
35+
return res;
36+
}
37+
}

group-anagrams/anniemon.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* 시간 복잡도:
3+
* 정렬 작업은 각 문자열의 길이가 m일 때 O(m logm)이고, 총 strs의 길이만큼 수행되므로
4+
* 시간 복잡도는 O(n * mlogm)
5+
* 공간 복잡도:
6+
* Map 키는 최대 길이 m인 문자열 strs.length개이다.
7+
* 따라서 공간 복잡도는 O(n * m)
8+
*/
9+
/**
10+
* @param {string[]} strs
11+
* @return {string[][]}
12+
*/
13+
var groupAnagrams = function(strs) {
14+
const map = new Map();
15+
for(const s of strs) {
16+
const key = s.split('').sort().join('');
17+
if(!map.has(key)) {
18+
map.set(key, [])
19+
}
20+
map.get(key).push(s);
21+
}
22+
return Array.from(map.values());
23+
};
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/**
2+
* 시간 복잡도: 주어진 문자열의 길이만큼 순회하므로, O(n)
3+
* 공간 복잡도: 삽입된 모든 문자열의 길이만큼 노드가 만들어지므로, 이를 m이라고 하면 O(m)
4+
*/
5+
var Trie = function() {
6+
this.isEnd = false;
7+
this.children = {};
8+
};
9+
10+
/**
11+
* @param {string} word
12+
* @return {void}
13+
*/
14+
Trie.prototype.insert = function(word) {
15+
let cur = this.children;
16+
for(const c of word) {
17+
if(!cur[c]) {
18+
cur[c] = { isEnd: false, children: {} };
19+
}
20+
cur = cur[c];
21+
}
22+
cur.isEnd = true;
23+
};
24+
25+
/**
26+
* @param {string} word
27+
* @return {boolean}
28+
*/
29+
Trie.prototype.search = function(word) {
30+
let cur = this.children;
31+
for(const c of word) {
32+
if(!cur[c]) {
33+
return false;
34+
}
35+
cur = cur[c]
36+
}
37+
return cur.isEnd;
38+
};
39+
40+
/**
41+
* @param {string} prefix
42+
* @return {boolean}
43+
*/
44+
Trie.prototype.startsWith = function(prefix) {
45+
let cur = this.children;
46+
for(const c of prefix) {
47+
if(!cur[c]){
48+
return false;
49+
}
50+
cur = cur[c];
51+
}
52+
return true;
53+
};
54+
55+
/**
56+
* Your Trie object will be instantiated and called as such:
57+
* var obj = new Trie()
58+
* obj.insert(word)
59+
* var param_2 = obj.search(word)
60+
* var param_3 = obj.startsWith(prefix)
61+
*/

0 commit comments

Comments
 (0)