Skip to content

Commit 3c848c5

Browse files
committed
[leet] 다양
1 parent 551305d commit 3c848c5

12 files changed

Lines changed: 297 additions & 0 deletions

허현빈/8주차/3Sum-2.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number[][]}
4+
*/
5+
var threeSum = function (nums) {
6+
const set = new Set();
7+
const ans = [];
8+
nums.sort((a, b) => a - b);
9+
10+
const findT = (t, i) => {
11+
let start = i + 1;
12+
let end = nums.length - 1;
13+
while (start < end) {
14+
if (nums[start] + nums[end] === t) {
15+
const val = [nums[i], nums[start], nums[end]].sort((a, b) => a - b);
16+
const str = val.join("");
17+
if (!set.has(str)) {
18+
set.add(str);
19+
ans.push(val);
20+
}
21+
start++;
22+
end--;
23+
while (nums[start] === nums[start - 1]) start++;
24+
while (nums[end] === nums[end + 1]) end--;
25+
} else if (nums[start] + nums[end] < t) {
26+
start++;
27+
} else if (nums[start] + nums[end] > t) {
28+
end--;
29+
}
30+
}
31+
};
32+
33+
for (let i = 0; i < nums.length; i++) {
34+
if (nums[i] === nums[i - 1]) continue;
35+
findT(nums[i] * -1, i);
36+
}
37+
return ans;
38+
};

허현빈/8주차/3sum-3.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number[][]}
4+
*/
5+
var threeSum = function (nums) {
6+
const ans = [];
7+
const set = new Set();
8+
nums.sort((a, b) => a - b);
9+
10+
const findT = (t, idx) => {
11+
const map = new Map();
12+
for (let i = idx + 1; i < nums.length; i++) {
13+
const diff = t - nums[i];
14+
if (map.has(diff)) {
15+
const val = [nums[idx], nums[i], nums[map.get(diff)]].sort(
16+
(a, b) => a - b
17+
);
18+
ans.push(val);
19+
while (nums[i] === nums[i + 1]) i++;
20+
}
21+
22+
map.set(nums[i], i);
23+
}
24+
};
25+
for (let i = 0; i < nums.length; i++) {
26+
if (nums[i] === nums[i - 1]) continue;
27+
findT(nums[i] * -1, i);
28+
}
29+
return ans;
30+
};
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/**
2+
* @param {number[]} height
3+
* @return {number}
4+
*/
5+
var maxArea = function (height) {
6+
let start = 0;
7+
let end = height.length - 1;
8+
let ans = 0;
9+
while (start < end) {
10+
ans = Math.max(ans, Math.min(height[start], height[end]) * (end - start));
11+
if (height[start] < height[end]) {
12+
start++;
13+
} else {
14+
end--;
15+
}
16+
}
17+
return ans;
18+
};
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} k
4+
* @return {boolean}
5+
*/
6+
var containsNearbyDuplicate = function (nums, k) {
7+
const map = new Map();
8+
for (let i = 0; i < nums.length; i++) {
9+
const val = nums[i];
10+
if (map.has(val)) {
11+
if (i - map.get(val) <= k) return true;
12+
}
13+
map.set(val, i);
14+
}
15+
return false;
16+
};
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* @param {string[]} strs
3+
* @return {string[][]}
4+
*/
5+
var groupAnagrams = function (strs) {
6+
const map = new Map();
7+
for (let i = 0; i < strs.length; i++) {
8+
const val = strs[i].split("").sort().join("");
9+
if (map.has(val)) {
10+
map.set(val, [...map.get(val), i]);
11+
} else {
12+
map.set(val, [i]);
13+
}
14+
}
15+
16+
const ans = [];
17+
for (const sameValues of map) {
18+
const tempAns = [];
19+
for (let i = 0; i < sameValues[1].length; i++) {
20+
tempAns.push(strs[sameValues[1][i]]);
21+
}
22+
ans.push(tempAns);
23+
}
24+
return ans;
25+
};

허현빈/8주차/Happy Number.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/**
2+
* @param {number} n
3+
* @return {boolean}
4+
*/
5+
var isHappy = function (n) {
6+
let temp = n.toString();
7+
const map = new Map();
8+
while (1) {
9+
let arr = temp.split("").map((e) => +e);
10+
let tempNum = 0;
11+
for (let i = 0; i < arr.length; i++) {
12+
tempNum += arr[i] ** 2;
13+
}
14+
temp = tempNum.toString();
15+
if (map.has(temp)) break;
16+
17+
map.set(temp);
18+
}
19+
20+
return temp === "1" ? true : false;
21+
};
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* @param {number[][]} intervals
3+
* @param {number[]} newInterval
4+
* @return {number[][]}
5+
*/
6+
var insert = function (intervals, newInterval) {
7+
const newArr = [...intervals, newInterval].sort((a, b) => {
8+
if (a[0] === b[0]) {
9+
return a[1] - b[1];
10+
}
11+
return a[0] - b[0];
12+
});
13+
14+
let start = newArr[0][0];
15+
let end = newArr[0][1];
16+
let ans = [];
17+
18+
for (let i = 0; i < newArr.length; i++) {
19+
let tempStart = newArr[i][0];
20+
let tempEnd = newArr[i][1];
21+
if (tempStart <= end) {
22+
end = Math.max(end, tempEnd);
23+
} else {
24+
ans.push([start, end]);
25+
start = tempStart;
26+
end = tempEnd;
27+
}
28+
}
29+
ans.push([start, end]);
30+
return ans;
31+
};
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* @param {number[][]} intervals
3+
* @return {number[][]}
4+
*/
5+
var merge = function (intervals) {
6+
const newArr = intervals.sort((a, b) => {
7+
if (a[0] === b[0]) {
8+
return a[1] - b[1];
9+
}
10+
return a[0] - b[0];
11+
});
12+
13+
let start = newArr[0][0];
14+
let end = newArr[0][1];
15+
const ans = [];
16+
17+
for (let i = 0; i < newArr.length; i++) {
18+
let tempStart = newArr[i][0];
19+
let tempEnd = newArr[i][1];
20+
21+
if (tempStart <= end) {
22+
end = Math.max(end, tempEnd);
23+
} else {
24+
ans.push([start, end]);
25+
start = tempStart;
26+
end = tempEnd;
27+
}
28+
}
29+
ans.push([start, end]);
30+
return ans;
31+
};

허현빈/8주차/Minimum Number of Arrows to Burst Balloons.js

Whitespace-only changes.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {string[]}
4+
*/
5+
var summaryRanges = function (nums) {
6+
let min = 0;
7+
let max = 0;
8+
let ans = [];
9+
10+
if (nums.length === 1) {
11+
return [nums[0].toString()];
12+
}
13+
14+
for (let i = 1; i < nums.length; i++) {
15+
if (nums[i] !== nums[i - 1] + 1) {
16+
if (min === max) {
17+
ans.push(nums[min].toString());
18+
} else {
19+
ans.push(nums[min].toString() + "->" + nums[max].toString());
20+
}
21+
min = i;
22+
max = i;
23+
} else {
24+
max = i;
25+
}
26+
27+
if (i === nums.length - 1) {
28+
if (min === max) {
29+
ans.push(nums[min].toString());
30+
} else {
31+
ans.push(nums[min].toString() + "->" + nums[max].toString());
32+
}
33+
}
34+
}
35+
36+
return ans;
37+
};

0 commit comments

Comments
 (0)