Skip to content

Commit 6732d7c

Browse files
authoredFeb 23, 2025
Merge branch 'DaleStudy:main' into main
2 parents 0102691 + cf5691a commit 6732d7c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+2408
-0
lines changed
 

โ€Ž3sum/forest000014.java

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
# Time Complexity: O(n^2)
3+
# Space Complexity: O(1)
4+
*/
5+
6+
class Solution {
7+
public List<List<Integer>> threeSum1(int[] nums) { // solution 1
8+
int n = nums.length;
9+
Arrays.sort(nums);
10+
Set<List<Integer>> ans = new HashSet<>();
11+
12+
for (int i = 0; i < n - 2; i++) {
13+
for (int j = i + 1; j < n - 1; j++) {
14+
int target = -nums[i] - nums[j]; // nums[i], nums[j]์™€ ๋”ํ•ด์„œ ํ•ฉ์ด 0์ด ๋˜๊ธฐ ์œ„ํ•ด nums[k]๊ฐ€ ๊ฐ€์ ธ์•ผํ•˜๋Š” ๊ฐ’
15+
int k = -1;
16+
int l = j + 1;
17+
int r = n - 1;
18+
while (l <= r) {
19+
int m = (r - l) / 2 + l;
20+
if (nums[m] == target) {
21+
k = m;
22+
break;
23+
} else if (nums[m] < target) {
24+
l = m + 1;
25+
} else {
26+
r = m - 1;
27+
}
28+
}
29+
if (k != -1) { // binary search์—์„œ target์„ ์ฐพ์€ ๊ฒฝ์šฐ
30+
ans.add(new ArrayList<>(Arrays.asList(nums[i], nums[j], nums[k])));
31+
}
32+
}
33+
}
34+
35+
return new ArrayList<>(ans);
36+
}
37+
38+
public List<List<Integer>> threeSum(int[] nums) { // solution 2
39+
int n = nums.length;
40+
Arrays.sort(nums);
41+
Set<List<Integer>> ans = new HashSet<>();
42+
43+
for (int i = 0; i < n - 2; i++) {
44+
int l = i + 1;
45+
int r = n - 1;
46+
int target = -nums[i];
47+
while (l < r) {
48+
int sum = nums[l] + nums[r];
49+
if (sum == target) {
50+
ans.add(new ArrayList<>(Arrays.asList(nums[i], nums[l], nums[r])));
51+
l++;
52+
r--; // ๋˜ ๋‹ค๋ฅธ (l, r) ์กฐํ•ฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, loop๋ฅผ ๊ณ„์† ์ด์–ด๊ฐ„๋‹ค.
53+
} else if (sum < target) {
54+
l++;
55+
} else {
56+
r--;
57+
}
58+
}
59+
}
60+
61+
return new ArrayList<>(ans);
62+
}
63+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// dfs์™€ ๋ถ„ํ•  ์ •๋ณต๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ๋˜๋Š” ๋ฌธ์ œ
2+
// dfs์ธ ๊ฒƒ์„ ์•Œ์•˜์œผ๋‚˜ ๋ชจ๋“  ์ˆซ์ž๊ฐ€ ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ๋ฅผ ํŒ๋ณ„ํ•˜์ง€ ๋ชปํ•ด GPT์—๊ฒŒ ๋„์›€์„ ์ฒ˜ํ•จ
3+
class Solution {
4+
private int maxSum = Integer.MIN_VALUE; // ์ „์ฒด ์ตœ๋Œ€ ๊ฒฝ๋กœ ํ•ฉ ์ €์žฅ
5+
6+
public int maxPathSum(TreeNode root) {
7+
dfs(root);
8+
return maxSum;
9+
}
10+
11+
private int dfs(TreeNode node) {
12+
if (node == null) return 0; // base case
13+
14+
// ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ๊ฒฝ๋กœ ํ•ฉ (์Œ์ˆ˜๋Š” ํฌํ•จ X โ†’ Math.max(0, value))
15+
int left = Math.max(0, dfs(node.left));
16+
int right = Math.max(0, dfs(node.right));
17+
18+
// ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•œ ์ตœ๋Œ€ ๊ฒฝ๋กœ (์™ผ์ชฝ + ๋ฃจํŠธ + ์˜ค๋ฅธ์ชฝ)
19+
int pathSum = left + node.val + right;
20+
21+
// ์ตœ๋Œ€ ๊ฒฝ๋กœ ๊ฐ’ ๊ฐฑ์‹ 
22+
maxSum = Math.max(maxSum, pathSum);
23+
24+
// โœ… ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ์ตœ๋Œ€ ๊ฒฝ๋กœ ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ (์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ)
25+
return node.val + Math.max(left, right);
26+
}
27+
}

0 commit comments

Comments
 (0)