forked from DaleStudy/leetcode-study
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhighball.js
More file actions
44 lines (38 loc) ยท 2.13 KB
/
Copy pathhighball.js
File metadata and controls
44 lines (38 loc) ยท 2.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
const twoSum = function (nums, target) {
/* -------------------------------------------------------------------------- */
/* target/2์ธ element๊ฐ 2๊ฐ ์์ ๊ฒฝ์ฐ early return */
/* -------------------------------------------------------------------------- */
let indices = [];
for (let i = 0; i < nums.length; i++) {
if (nums[i] === target / 2) indices.push(i);
if (indices.length === 2) break;
}
if (indices.length === 2) return indices;
/* -------------------------------------------------------------------------- */
/* absDNums[i] === absDNums[j]์ธ ๊ฒฝ์ฐ */
/* -------------------------------------------------------------------------- */
indices = []; //indices ์ด๊ธฐํ
const dNums = nums.map((num) => num - target / 2); //nums์ ๊ฐ ๊ฐ์ target/2 ๊ฐ๊ณผ์ ํธ์ฐจ๋ค๋ก ๋ณํ
const absDNums = dNums.map(Math.abs); //dNumbs์ ๊ฐ ๊ฐ์ ์ ๋๊ฐ ์ทจํด์ฃผ๊ธฐ
const uniqueAbsDNums = new Map(); //uniqueAbsDNums์ absDNums์ ๊ฐ ๊ฐ์ key ๊ฐ์ผ๋ก ํ๊ณ ๊ทธ key์ ๋ถํธ๋ฅผ boolean์ผ๋ก ๋ณํํ ๊ฐ์ value๋ก ๊ฐ๋ map์
let j;
for (let i = 0; i < absDNums.length; i++) {
if (
uniqueAbsDNums.has(absDNums[i]) && //์์ ๋์จ ์๋ค ์ค ํ๋์ ์ ๋๊ฐ์ด ๊ฐ์ ์ ๋ฑ์ฅ (absDNums[i])
dNums[i] > 0 != uniqueAbsDNums.get(absDNums[i]) //์ ๋๊ฐ์ด ๊ฐ์ ์ด์ ๊ฐ ์์ ๋์จ ์๋ค ์ค ํ๋์ ์์ ๊ฐ์ ๊ฐ์ด์ด์๊ฐ ์๋๋ผ ๋ถํธ๋ง ๋ฐ๋์ธ ์์ด๊ธฐ ๋๋ฌธ์ด๋ผ๋ ๊ฒ ์ฒดํฌ (๋ ์๊ฐ target/2๋ก ๊ฐ์๋ค๋ฉด ์ด ์กฐ๊ฑด์ผ๋ก ๊ฑธ๋ฌ์ ธ ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์์์ early returnํ๊ธธ ์ํ์)
) {
j = i;
break;
}
uniqueAbsDNums.set(absDNums[i], dNums[i] > 0);
}
for (let i = 0; i < absDNums.length; i++) {
// j index ์์ ๋์ค๋, absDNums[j]์ ๊ฐ์ ์ ๋๊ฐ์ ๊ฐ์ง๋ ์ ์ฐพ๊ธฐ(์ for๋ฌธ์์ j๋ฅผ ์ฐพ์ ๋ฐฉ์ ๋๋ถ์ ์ด ์๋ absDNums[j]์ ์ ๋๊ฐ์ ๊ฐ์ง๋ง ๋ถํธ๋ ๋ฐ๋์ธ ์์ผ ๊ฒ์)
if (absDNums[i] === absDNums[j]) {
indices.push(i);
indices.push(j);
break;
}
}
return indices;
};