Skip to content

Commit f698c4c

Browse files
authored
Merge pull request #2027 from jaejeong1/week2
[jaejeong1] WEEK 02 solutions
2 parents 9d82e92 + bd09a9e commit f698c4c

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

โ€Ž3sum/jaejeong1.javaโ€Ž

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
class Solution {
2+
public List<List<Integer>> threeSum(int[] nums) {
3+
// ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„: O(N2), ๊ณต๊ฐ„ ๋ณต์žก๋„: O(N)
4+
// ์ •๋ ฌ: ์‹œ๊ฐ„ ๋ณต์žก๋„: O(N log N)
5+
Arrays.sort(nums);
6+
List<List<Integer>> result = new ArrayList<>();
7+
// x ํ•˜๋‚˜ ์žก์•„๋†“๊ณ , ํˆฌํฌ์ธํ„ฐ ์‚ฌ์šฉํ•ด์„œ y + z ๊ฐ€ -x ๋ณด๋‹ค ํฌ๋ฉด z ๋ฅผ - 1, ์ ์œผ๋ฉด y ๋ฅผ + 1, y์™€ z๊ฐ€ ๋งŒ๋‚˜๋ฉด break, y + z ๊ฐ€ -x ์™€ ๊ฐ™์œผ๋ฉด ์ •๋‹ต
8+
// 0 ๋ณด๋‹ค ํฐ ์ผ€์ด์Šค๋Š” ๋Œ ํ•„์š”๊ฐ€ ์—†์Œ
9+
for (int i = 0; i < nums.length && nums[i] <= 0; ++i) {
10+
// ์‹œ๊ฐ„ ๋ณต์žก๋„: O(N)
11+
if (i == 0 || nums[i - 1] != nums[i]) {
12+
findThreeSum(nums, i, result);
13+
}
14+
}
15+
return result;
16+
}
17+
18+
void findThreeSum(int[] nums, int i, List<List<Integer>> result) {
19+
// ์‹œ๊ฐ„ ๋ณต์žก๋„: O(N), ๊ณต๊ฐ„ ๋ณต์žก๋„: O(3N) = O(N)
20+
int left = i + 1, right = nums.length - 1;
21+
while (left < right) {
22+
int sum = nums[i] + nums[left] + nums[right];
23+
if (sum < 0) {
24+
++left;
25+
} else if (sum > 0) {
26+
--right;
27+
} else {
28+
// ์ •๋‹ต ์ผ€์ด์Šค ์ฐพ์•„์„œ ๊ฒฐ๊ณผ์— ๋„ฃ๊ธฐ
29+
result.add(Arrays.asList(nums[i], nums[left++], nums[right--]));
30+
while (left < right && nums[left] == nums[left - 1]) ++left; // ์ˆซ์ž ์ค‘๋ณต์ธ ์ผ€์ด์Šค ๋„˜์–ด๊ฐ€๊ธฐ
31+
}
32+
}
33+
}
34+
}

0 commit comments

Comments
ย (0)