Skip to content

Commit aff647b

Browse files
authored
Merge pull request #657 from anniemon/main
[anniemon78] Week 1
2 parents 5acf128 + de9ff87 commit aff647b

File tree

4 files changed

+111
-0
lines changed

4 files changed

+111
-0
lines changed

contains-duplicate/anniemon.js

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* 시간 복잡도:
3+
* 맵에서 nums[i]를 찾거나 삽입하는 데 걸리는 시간 O(1) * n(nums.length)
4+
* 즉, O(n)
5+
* 공간 복잡도:
6+
* 최대 map의 크기는 nums.length만큼
7+
* 즉, O(n)
8+
*/
9+
/**
10+
* @param {number[]} nums
11+
* @return {boolean}
12+
*/
13+
var containsDuplicate = function(nums) {
14+
const map = new Map();
15+
for(let i = 0; i < nums.length; i++) {
16+
if(!map.has(nums[i])) {
17+
map.set(nums[i], i);
18+
} else {
19+
return true;
20+
}
21+
}
22+
return false;
23+
};
+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* 시간 복잡도:
3+
* set의 요소 중 연속하는 시퀀스의 첫번째 숫자일 때만
4+
* while 루프를 실행
5+
* 따라서 요소당 최대 1회 순회
6+
* 즉, 시간 복잡도는 O(n)
7+
* 공간 복잡도:
8+
* set은 중복이 없을 경우 최대 O(n)를 차지함
9+
* 즉, 공간 복잡도는 O(n)
10+
*/
11+
/**
12+
* @param {number[]} nums
13+
* @return {number}
14+
*/
15+
var longestConsecutive = function (nums) {
16+
const set = new Set(nums);
17+
let res = 0;
18+
for (const n of set) {
19+
let seqLen = 0, target = n;
20+
const isSeqStart = !set.has(target - 1);
21+
if (isSeqStart) {
22+
while (set.has(target)) {
23+
target++;
24+
seqLen++;
25+
}
26+
}
27+
res = Math.max(seqLen, res);
28+
}
29+
return res;
30+
};

top-k-frequent-elements/anniemon.js

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* 시간 복잡도:
3+
* nums.length만큼의 배열을 정렬해야 하므로
4+
* 즉, O(n * log n)
5+
* 공간 복잡도:
6+
* 최대 nums.length만큼의 map 생성
7+
* 즉, O(n)
8+
*/
9+
/**
10+
* @param {number[]} nums
11+
* @param {number} k
12+
* @return {number[]}
13+
*/
14+
var topKFrequent = function(nums, k) {
15+
const map = new Map();
16+
for(const n of nums) {
17+
if(!map.has(n)) {
18+
map.set(n, 0);
19+
}
20+
map.set(n, map.get(n) + 1)
21+
}
22+
const sorted = Array.from(map).sort((a, b) => b[1]-a[1]);
23+
return sorted.slice(0, k).map(e => e[0])
24+
};

valid-palindrome/anniemon.js

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
* 시간 복잡도:
3+
* s.length만큼 탐색. 즉, O(n)
4+
* 공간 복잡도:
5+
* 변수와 함수만 저장. 즉, O(1)
6+
*/
7+
8+
/**
9+
* @param {string} s
10+
* @return {boolean}
11+
*/
12+
var isPalindrome = function(s) {
13+
const isAlphaNumeric = (v) => {
14+
return (/^[a-z0-9]$/i).test(v);
15+
};
16+
17+
let l = 0;
18+
let r = s.length - 1;
19+
while(l < r) {
20+
while(!isAlphaNumeric(s[l]) && l < r) {
21+
l++;
22+
}
23+
while(!isAlphaNumeric(s[r]) && l < r) {
24+
r--;
25+
}
26+
27+
if(s[l].toLowerCase() !== s[r].toLowerCase()) {
28+
return false;
29+
}
30+
l++;
31+
r--;
32+
}
33+
return true;
34+
};

0 commit comments

Comments
 (0)