Skip to content

Commit 398af75

Browse files
3357 Minimize the Maximum Adjacent Element Difference Solved in java
1 parent 6a17812 commit 398af75

File tree

2 files changed

+99
-0
lines changed

2 files changed

+99
-0
lines changed

solution/3300-3399/3357.Minimize the Maximum Adjacent Element Difference/README_EN.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,55 @@ def minimize_max_diff(nums):
131131
#### Java
132132

133133
```java
134+
public class MinimizeMaxDifference {
135+
public int minimizeMaxDiff(int[] nums) {
136+
int left = 0, right = (int) 1e9, result = (int) 1e9;
137+
138+
while (left <= right) {
139+
int mid = left + (right - left) / 2;
140+
if (isValid(nums, mid)) {
141+
result = mid;
142+
right = mid - 1;
143+
} else {
144+
left = mid + 1;
145+
}
146+
}
147+
148+
return result;
149+
}
150+
151+
private boolean isValid(int[] nums, int maxDiff) {
152+
int prev = nums[0] != -1 ? nums[0] : -1;
153+
154+
for (int i = 1; i < nums.length; i++) {
155+
int current = nums[i];
156+
if (current == -1) {
157+
if (prev != -1) {
158+
current = Math.max(prev - maxDiff, 1); // Ensure values are positive
159+
} else {
160+
current = 1; // Default to a positive value
161+
}
162+
}
163+
if (prev != -1 && Math.abs(current - prev) > maxDiff) {
164+
return false;
165+
}
166+
prev = current;
167+
}
168+
return true;
169+
}
134170

171+
public static void main(String[] args) {
172+
MinimizeMaxDifference solver = new MinimizeMaxDifference();
173+
int[] nums1 = {1, 2, -1, 10, 8};
174+
System.out.println(solver.minimizeMaxDiff(nums1)); // Output: 4
175+
176+
int[] nums2 = {-1, -1, -1};
177+
System.out.println(solver.minimizeMaxDiff(nums2)); // Output: 0
178+
179+
int[] nums3 = {-1, 10, -1, 8};
180+
System.out.println(solver.minimizeMaxDiff(nums3)); // Output: 1
181+
}
182+
}
135183
```
136184

137185
#### C++
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
public class Solution {
2+
3+
public int minimizeMaxDiff(int[] nums) {
4+
int left = 0, right = (int) 1e9, result = (int) 1e9;
5+
6+
while (left <= right) {
7+
int mid = left + (right - left) / 2;
8+
if (isValid(nums, mid)) {
9+
result = mid;
10+
right = mid - 1;
11+
} else {
12+
left = mid + 1;
13+
}
14+
}
15+
16+
return result;
17+
}
18+
19+
private boolean isValid(int[] nums, int maxDiff) {
20+
int prev = nums[0] != -1 ? nums[0] : -1;
21+
22+
for (int i = 1; i < nums.length; i++) {
23+
int current = nums[i];
24+
if (current == -1) {
25+
if (prev != -1) {
26+
current = Math.max(prev - maxDiff, 1);
27+
} else {
28+
current = 1;
29+
}
30+
}
31+
if (prev != -1 && Math.abs(current - prev) > maxDiff) {
32+
return false;
33+
}
34+
prev = current;
35+
}
36+
return true;
37+
}
38+
39+
public static void main(String[] args) {
40+
Solution solver = new Solution();
41+
42+
int[] nums1 = {1, 2, -1, 10, 8};
43+
System.out.println(solver.minimizeMaxDiff(nums1));
44+
45+
int[] nums2 = {-1, -1, -1};
46+
System.out.println(solver.minimizeMaxDiff(nums2));
47+
48+
int[] nums3 = {-1, 10, -1, 8};
49+
System.out.println(solver.minimizeMaxDiff(nums3));
50+
}
51+
}

0 commit comments

Comments
 (0)