Skip to content

Commit 16abf6e

Browse files
committed
validate binary search tree
1 parent 0511ac6 commit 16abf6e

File tree

2 files changed

+28
-65
lines changed

2 files changed

+28
-65
lines changed

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

Lines changed: 3 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,7 @@
1-
import java.util.ArrayList;
2-
import java.util.Arrays;
31
import java.util.List;
42

5-
/**
6-
* ๋ฌธ์ œ ํ’€์ด
7-
*/
8-
// -4 -1 -1 0 2 2
9-
// p1 p2 p3 sum < 0 -> p2 ์•ž์œผ๋กœ
10-
// p1 p2 p3 sum < 0 -> p2 ์•ž์œผ๋กœ
11-
// p1 p2 p3 sum < 0 -> p2 ์•ž์œผ๋กœ
12-
// p1 p2p3 sum = 0 -> p1 ์•ž์œผ๋กœ
13-
// p1 p2 p3 sum = 0 -> p3 ๊ฐ’ ๋‹ค๋ฅธ ๊ฒŒ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ์ด๋™
14-
// p1 p2 p3 sum < 0 -> p2 ์•ž์œผ๋กœ ์ธ๋ฐ, p2 > p3 ๋˜๋ฏ€๋กœ p1 ์•ž์œผ๋กœ
15-
// p1 p2 p3 sum = 0 ๋ฐ˜๋ณต
3+
class Solution{
4+
public List<List<Integer>> threeSum(int[] nums){
165

17-
/**
18-
* ์‹œ๊ฐ„/๊ณต๊ฐ„ ๋ณต์žก๋„
19-
*/
20-
// ์‹œ๊ฐ„ ๋ณต์žก๋„ - ์ˆœํšŒ ํšŸ์ˆ˜: n + (n-1) + (n-2) + .. => O(N^2)
21-
// ๊ณต๊ฐ„ ๋ณต์žก๋„ - ๋ฐฐ์—ด์„ ์ •๋ ฌํ•˜๋Š” ๋ฐ O(n log n)์˜ ๊ณต๊ฐ„ + ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” answer ๋ฆฌ์ŠคํŠธ๋Š” ๋ฌธ์ œ์˜ ์š”๊ตฌ์— ๋”ฐ๋ผ O(k)์˜ ๊ณต๊ฐ„ = O(n log n) (๋ฐฐ์—ด ์ •๋ ฌ์„ ์œ„ํ•œ ๊ณต๊ฐ„) + O(k) (๊ฒฐ๊ณผ ์ €์žฅ ๊ณต๊ฐ„)
22-
23-
class Solution {
24-
public List<List<Integer>> threeSum(int[] nums) {
25-
Arrays.sort(nums); // Sort the array first
26-
List<List<Integer>> answer = new ArrayList<>();
27-
28-
for (int pointer1 = 0; pointer1 < nums.length - 2; pointer1++) {
29-
// pointer1 ์˜ ์ค‘๋ณต ๊ฐ’ skip
30-
if (pointer1 > 0 && nums[pointer1] == nums[pointer1 - 1]) {
31-
continue;
32-
}
33-
34-
int pointer2 = pointer1 + 1; // pointer2 ๋Š” pointer1 ์˜ ํ•œ ์นธ ์•ž
35-
int pointer3 = nums.length - 1; // pointer3 ๋Š” ๋์—์„œ ๋ถ€ํ„ฐ
36-
37-
while (pointer2 < pointer3) {
38-
int sum = nums[pointer1] + nums[pointer2] + nums[pointer3];
39-
40-
if (sum < 0) {
41-
pointer2++;
42-
} else if (sum > 0) {
43-
pointer3--;
44-
} else {
45-
// sum == 0
46-
answer.add(Arrays.asList(nums[pointer1], nums[pointer2], nums[pointer3]));
47-
48-
// pointer2 ์ค‘๋ณต ๊ฐ’ ์ œ๊ฑฐ
49-
while (pointer2 < pointer3 && nums[pointer2] == nums[pointer2 + 1]) {
50-
pointer2++;
51-
}
52-
53-
// pointer3 ์ค‘๋ณต ๊ฐ’ ์ œ๊ฑฐ
54-
while (pointer2 < pointer3 && nums[pointer3] == nums[pointer3 - 1]) {
55-
pointer3--;
56-
}
57-
58-
// ๋‘ ๊ฐ’ ๋ชจ๋‘ move
59-
pointer2++;
60-
pointer3--;
61-
}
62-
}
63-
}
64-
65-
return answer;
666
}
67-
}
68-
69-
7+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// ์‹œ๊ฐ„ ๋ณต์žก๋„ O(n) - n์€ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ๊ฐœ์ˆ˜
2+
// ๊ณต๊ฐ„ ๋ณต์žก๋„ O(h) - h๋Š” ํŠธ๋ฆฌ์˜ ๋†’์ด (์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ ๊ณต๊ฐ„)
3+
public class TreeNode{
4+
int val;
5+
TreeNode left;
6+
TreeNode right;
7+
8+
TreeNode(int x) {
9+
val = x;
10+
}
11+
}
12+
class Solution{
13+
public boolean isValidBST(TreeNode root) {
14+
return isValidBSTHelper(root, Long.MIN_VALUE, Long.MAX_VALUE);
15+
}
16+
private boolean isValidBSTHelper(TreeNode node, long min, long max) {
17+
if (node == null) {
18+
return true;
19+
}
20+
if (node.val <= min || node.val >= max) {
21+
return false;
22+
}
23+
return isValidBSTHelper(node.left, min, node.val) && isValidBSTHelper(node.right, node.val, max);
24+
}
25+
}

0 commit comments

Comments
ย (0)