Skip to content

Commit baade58

Browse files
committed
Added 2 solutions & modified 3 solutions
1 parent 5a74e20 commit baade58

File tree

5 files changed

+129
-78
lines changed

5 files changed

+129
-78
lines changed

Hard/Odd Even Jump.java

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,36 @@
11
class Solution {
2-
public int oddEvenJumps(int[] A) {
3-
if (A.length <= 1) {
4-
return A.length;
2+
public int oddEvenJumps(int[] A) {
3+
int n = A.length;
4+
if (n <= 1) {
5+
return n;
6+
}
7+
boolean[] odd = new boolean[n];
8+
boolean[] even = new boolean[n];
9+
odd[n - 1] = even[n - 1] = true;
10+
TreeMap<Integer, Integer> map = new TreeMap<>();
11+
map.put(A[n - 1], n - 1);
12+
int count = 0;
13+
for (int i = n - 2; i >= 0; i--) {
14+
int val = A[i];
15+
if (map.containsKey(val)) {
16+
odd[i] = even[map.get(val)];
17+
even[i] = odd[map.get(val)];
18+
}
19+
else {
20+
Integer lower = map.lowerKey(val);
21+
Integer higher = map.higherKey(val);
22+
if (lower != null) {
23+
even[i] = odd[map.get(lower)];
524
}
6-
boolean[] odd = new boolean[A.length];
7-
boolean[] even = new boolean[A.length];
8-
odd[A.length - 1] = even[A.length - 1] = true;
9-
TreeMap<Integer, Integer> treeMap = new TreeMap<>();
10-
treeMap.put(A[A.length - 1], A.length - 1);
11-
int count = 0;
12-
for (int i = A.length - 2; i >= 0; i--) {
13-
int val = A[i];
14-
if (treeMap.containsKey(val)) {
15-
odd[i] = even[treeMap.get(val)];
16-
even[i] = odd[treeMap.get(val)];
17-
}
18-
else {
19-
Integer lower = treeMap.lowerKey(val);
20-
Integer higher = treeMap.higherKey(val);
21-
if (lower != null) {
22-
even[i] = odd[treeMap.get(lower)];
23-
}
24-
if (higher != null) {
25-
odd[i] = even[treeMap.get(higher)];
26-
}
27-
}
28-
treeMap.put(val, i);
29-
count += odd[i] ? 1 : 0;
25+
if (higher != null) {
26+
odd[i] = even[map.get(higher)];
3027
}
31-
return count + 1;
28+
}
29+
map.put(val, i);
30+
}
31+
for (boolean b : odd) {
32+
count += b ? 1 : 0;
3233
}
34+
return count;
35+
}
3336
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public boolean increasingTriplet(int[] nums) {
3+
int firstNum = Integer.MAX_VALUE;
4+
int secondNum = Integer.MAX_VALUE;
5+
for (int num : nums) {
6+
if (num <= firstNum) {
7+
firstNum = num;
8+
}
9+
else if (num <= secondNum) {
10+
secondNum = num;
11+
}
12+
else {
13+
return true;
14+
}
15+
}
16+
return false;
17+
}
18+
}

Medium/Maximum Level Sum of a Binary Tree.java

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4,41 +4,44 @@
44
* int val;
55
* TreeNode left;
66
* TreeNode right;
7-
* TreeNode(int x) { val = x; }
7+
* TreeNode() {}
8+
* TreeNode(int val) { this.val = val; }
9+
* TreeNode(int val, TreeNode left, TreeNode right) {
10+
* this.val = val;
11+
* this.left = left;
12+
* this.right = right;
13+
* }
814
* }
915
*/
1016
class Solution {
11-
public int maxLevelSum(TreeNode root) {
12-
if (root == null) {
13-
return 0;
17+
public int maxLevelSum(TreeNode root) {
18+
if (root == null) {
19+
return 0;
20+
}
21+
int currLevel = 1;
22+
int maxSum = Integer.MIN_VALUE;
23+
int maxSumLevel = 0;
24+
Queue<TreeNode> queue = new LinkedList<>();
25+
queue.add(root);
26+
while (!queue.isEmpty()) {
27+
int size = queue.size();
28+
int currSum = 0;
29+
while (size-- > 0) {
30+
TreeNode removed = queue.remove();
31+
currSum += removed.val;
32+
if (removed.left != null) {
33+
queue.add(removed.left);
1434
}
15-
16-
Queue<TreeNode> queue = new LinkedList<>();
17-
queue.add(root);
18-
int maxSum = 0;
19-
int maxLevel = 1;
20-
int currLevel = 1;
21-
22-
while (!queue.isEmpty()) {
23-
int size = queue.size();
24-
int tempSum = 0;
25-
while (size-- > 0) {
26-
TreeNode removed = queue.remove();
27-
tempSum += removed.val;
28-
if (removed.left != null) {
29-
queue.add(removed.left);
30-
}
31-
if (removed.right != null) {
32-
queue.add(removed.right);
33-
}
34-
}
35-
if (maxSum < tempSum) {
36-
maxSum = tempSum;
37-
maxLevel = currLevel;
38-
}
39-
currLevel++;
35+
if (removed.right != null) {
36+
queue.add(removed.right);
4037
}
41-
42-
return maxLevel;
38+
}
39+
if (maxSum < currSum) {
40+
maxSum = currSum;
41+
maxSumLevel = currLevel;
42+
}
43+
currLevel++;
4344
}
45+
return maxSumLevel;
46+
}
4447
}

Medium/Minimum Area Rectangle.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution {
2+
public int minAreaRect(int[][] points) {
3+
Map<Integer, List<Integer>> rows = new TreeMap();
4+
// Map of key as x coordinate and value as list of y coordinates
5+
for (int[] point: points) {
6+
int x = point[0];
7+
int y = point[1];
8+
rows.computeIfAbsent(x, k -> new ArrayList()).add(y);
9+
}
10+
int ans = Integer.MAX_VALUE;
11+
Map<String, Integer> lastX = new HashMap();
12+
for (int x: rows.keySet()) {
13+
List<Integer> row = rows.get(x);
14+
Collections.sort(row);
15+
for (int i = 0; i < row.size(); ++i) {
16+
for (int j = i + 1; j < row.size(); ++j) {
17+
int y1 = row.get(i);
18+
int y2 = row.get(j);
19+
String code = y1 + ":" + y2;
20+
if (lastX.containsKey(code)) {
21+
ans = Math.min(ans, (x - lastX.get(code)) * (y2 - y1));
22+
}
23+
lastX.put(code, x);
24+
}
25+
}
26+
}
27+
return ans < Integer.MAX_VALUE ? ans : 0;
28+
}
29+
}

Medium/My Calendar II.java

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,23 @@
11
class MyCalendarTwo {
2-
private List<int[]> books = new ArrayList<>();
3-
4-
public boolean book(int s, int e) {
5-
6-
MyCalendar overlaps = new MyCalendar();
7-
for (int[] b : books)
8-
if (Math.max(b[0], s) < Math.min(b[1], e))
9-
if (!overlaps.book(Math.max(b[0], s), Math.min(b[1], e))) return false;
10-
books.add(new int[]{ s, e });
11-
return true;
12-
}
2+
TreeMap<Integer, Integer> map;
3+
public MyCalendarTwo() {
4+
map = new TreeMap<>();
5+
}
136

14-
private static class MyCalendar {
15-
List<int[]> books = new ArrayList<>();
16-
public boolean book(int start, int end) {
17-
for (int[] b : books)
18-
if (Math.max(b[0], start) < Math.min(b[1], end)) return false;
19-
books.add(new int[]{ start, end });
20-
return true;
21-
}
7+
public boolean book(int start, int end) {
8+
map.put(start, map.getOrDefault(start, 0) + 1);
9+
map.put(end, map.getOrDefault(end, 0) - 1);
10+
int eventCount = 0;
11+
for (int val : map.values()) {
12+
eventCount += val;
13+
if (eventCount >= 3) {
14+
map.put(start, map.get(start) - 1);
15+
map.put(end, map.get(end) + 1);
16+
return false;
17+
}
2218
}
19+
return true;
20+
}
2321
}
2422

2523
/**

0 commit comments

Comments
 (0)