& nums, int k) {
int n = nums.size();
sort(nums.begin(), nums.end());
-
+
int l = 0, r = nums[n - 1] - nums[0];
while (l < r) {
int mid = l + (r - l) / 2;
From 1ec9aa35427ac8df234ef8ff36b31c85f86a8f07 Mon Sep 17 00:00:00 2001
From: Abdullah <134060614+rajaabdullah833@users.noreply.github.com>
Date: Sat, 23 Nov 2024 03:08:34 +0500
Subject: [PATCH 4/7] Delete solution/3300-3399/3357.Minimize the Maximum
Adjacent Element Difference/README_EN.md
---
.../README_EN.md | 232 ------------------
1 file changed, 232 deletions(-)
delete mode 100644 solution/3300-3399/3357.Minimize the Maximum Adjacent Element Difference/README_EN.md
diff --git a/solution/3300-3399/3357.Minimize the Maximum Adjacent Element Difference/README_EN.md b/solution/3300-3399/3357.Minimize the Maximum Adjacent Element Difference/README_EN.md
deleted file mode 100644
index aa01c7ffa400d..0000000000000
--- a/solution/3300-3399/3357.Minimize the Maximum Adjacent Element Difference/README_EN.md
+++ /dev/null
@@ -1,232 +0,0 @@
----
-comments: true
-difficulty: Hard
-edit_url: https://github.com/doocs/leetcode/edit/main/solution/3300-3399/3357.Minimize%20the%20Maximum%20Adjacent%20Element%20Difference/README_EN.md
-tags:
- - Greedy
- - Array
- - Binary Search
----
-
-
-
-# [3357. Minimize the Maximum Adjacent Element Difference](https://leetcode.com/problems/minimize-the-maximum-adjacent-element-difference)
-
-[中文文档](/solution/3300-3399/3357.Minimize%20the%20Maximum%20Adjacent%20Element%20Difference/README.md)
-
-## Description
-
-You are given an array of integers nums
. Some values in nums
are missing and are denoted by -1.
-
-You can choose a pair of positive integers (x, y)
exactly once and replace each missing element with either x
or y
.
-
-You need to minimize the maximum absolute difference between adjacent elements of nums
after replacements.
-
-Return the minimum possible difference.
-
-
-Example 1:
-
-
-
Input: nums = [1,2,-1,10,8]
-
-
Output: 4
-
-
Explanation:
-
-
By choosing the pair as (6, 7)
, nums can be changed to [1, 2, 6, 10, 8]
.
-
-
The absolute differences between adjacent elements are:
-
-
- |1 - 2| == 1
- |2 - 6| == 4
- |6 - 10| == 4
- |10 - 8| == 2
-
-
-
-Example 2:
-
-
-
Input: nums = [-1,-1,-1]
-
-
Output: 0
-
-
Explanation:
-
-
By choosing the pair as (4, 4)
, nums can be changed to [4, 4, 4]
.
-
-
-Example 3:
-
-
-
Input: nums = [-1,10,-1,8]
-
-
Output: 1
-
-
Explanation:
-
-
By choosing the pair as (11, 9)
, nums can be changed to [11, 10, 9, 8]
.
-
-
-
-Constraints:
-
-
- 2 <= nums.length <= 105
- nums[i]
is either -1 or in the range [1, 109]
.
-
-
-
-
-## Solutions
-
-
-
-### Solution 1
-
-#### Approach:
-
-1. **Greedy Replacement Strategy**:
-
- - Traverse the array and determine the missing (-1) positions.
- - Identify the potential minimum and maximum values needed to replace the missing positions such that the absolute difference between adjacent elements is minimized.
- - Use binary search to minimize the maximum absolute difference.
-
-2. **Binary Search for Optimization**:
- - Apply binary search to determine the best pair `(x, y)` that minimizes the maximum adjacent difference.
-
-#### Python3
-
-```python
-def minimize_max_diff(nums):
- def is_valid(max_diff, x, y):
- prev = nums[0] if nums[0] != -1 else x
- for i in range(1, len(nums)):
- current = nums[i]
- if current == -1:
- current = x if abs(prev - x) <= max_diff else y
- if abs(current - prev) > max_diff:
- return False
- prev = current
- return True
-
- missing_positions = [i for i, val in enumerate(nums) if val == -1]
-
- left, right = 0, 10**9
- result = 10**9
-
- while left <= right:
- mid = (left + right) // 2
- x, y = mid, mid + 1 # Candidates for missing values
- if is_valid(mid, x, y):
- result = mid
- right = mid - 1
- else:
- left = mid + 1
-
- return result
-```
-
-#### Java
-
-```java
-public class MinimizeMaxDifference {
- public int minimizeMaxDiff(int[] nums) {
- int left = 0, right = (int) 1e9, result = (int) 1e9;
-
- while (left <= right) {
- int mid = left + (right - left) / 2;
- if (isValid(nums, mid)) {
- result = mid;
- right = mid - 1;
- } else {
- left = mid + 1;
- }
- }
-
- return result;
- }
-
- private boolean isValid(int[] nums, int maxDiff) {
- int prev = nums[0] != -1 ? nums[0] : -1;
-
- for (int i = 1; i < nums.length; i++) {
- int current = nums[i];
- if (current == -1) {
- if (prev != -1) {
- current = Math.max(prev - maxDiff, 1); // Ensure values are positive
- } else {
- current = 1; // Default to a positive value
- }
- }
- if (prev != -1 && Math.abs(current - prev) > maxDiff) {
- return false;
- }
- prev = current;
- }
- return true;
- }
-
- public static void main(String[] args) {
- MinimizeMaxDifference solver = new MinimizeMaxDifference();
- int[] nums1 = {1, 2, -1, 10, 8};
- System.out.println(solver.minimizeMaxDiff(nums1)); // Output: 4
-
- int[] nums2 = {-1, -1, -1};
- System.out.println(solver.minimizeMaxDiff(nums2)); // Output: 0
-
- int[] nums3 = {-1, 10, -1, 8};
- System.out.println(solver.minimizeMaxDiff(nums3)); // Output: 1
- }
-}
-```
-
-#### C++
-
-```cpp
-class Solution {
-public:
- int minimizeMaxDifference(vector& nums, int k) {
- int n = nums.size();
- sort(nums.begin(), nums.end());
-
- int l = 0, r = nums[n - 1] - nums[0];
- while (l < r) {
- int mid = l + (r - l) / 2;
- if (canMinimize(nums, k, mid)) {
- r = mid;
- } else {
- l = mid + 1;
- }
- }
- return l;
- }
-
-private:
- bool canMinimize(vector& nums, int k, int target) {
- int ops = 0;
- for (int i = 1; i < nums.size(); ++i) {
- if (nums[i] - nums[i - 1] > target) {
- ops += (nums[i] - nums[i - 1] - 1) / target;
- if (ops > k) return false;
- }
- }
- return true;
- }
-};
-
-```
-
-#### Go
-
-```go
-
-```
-
-
-
-
-
-
From 3504bf1b8eb01fb5baa4d06a031e7ab6006b9088 Mon Sep 17 00:00:00 2001
From: Abdullah <134060614+rajaabdullah833@users.noreply.github.com>
Date: Sat, 23 Nov 2024 03:10:35 +0500
Subject: [PATCH 5/7] Delete solution/3300-3399/3357.Minimize the Maximum
Adjacent Element Difference/Solution.cpp
---
.../Solution.cpp | 54 -------------------
1 file changed, 54 deletions(-)
delete mode 100644 solution/3300-3399/3357.Minimize the Maximum Adjacent Element Difference/Solution.cpp
diff --git a/solution/3300-3399/3357.Minimize the Maximum Adjacent Element Difference/Solution.cpp b/solution/3300-3399/3357.Minimize the Maximum Adjacent Element Difference/Solution.cpp
deleted file mode 100644
index 8a5b1926545c0..0000000000000
--- a/solution/3300-3399/3357.Minimize the Maximum Adjacent Element Difference/Solution.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-class Solution {
-public:
- int minimizeMaxDifference(vector& nums) {
- int n = nums.size();
- int minVal = INT_MAX, maxVal = INT_MIN;
-
- for (int i = 0; i < n; ++i) {
- if (nums[i] != -1) {
- minVal = min(minVal, nums[i]);
- maxVal = max(maxVal, nums[i]);
- }
- }
-
- if (minVal == INT_MAX) {
- return 0;
- }
-
- auto isPossible = [&](int maxDiff) -> bool {
- int prev = -1;
-
- for (int i = 0; i < n; ++i) {
- if (nums[i] != -1) {
- prev = nums[i];
- } else {
-
- if (prev != -1) {
- if (abs(prev - minVal) > maxDiff && abs(prev - maxVal) > maxDiff) {
- return false;
- }
- prev = (abs(prev - minVal) <= abs(prev - maxVal)) ? minVal : maxVal;
- } else {
- prev = minVal;
- }
- }
- }
-
- return true;
- };
-
- int left = 0, right = maxVal - minVal, result = right;
-
- while (left <= right) {
- int mid = left + (right - left) / 2;
- if (isPossible(mid)) {
- result = mid;
- right = mid - 1;
- } else {
- left = mid + 1;
- }
- }
-
- return result;
- }
-};
From f331d70a8bd1e86264e9d0881682fefed3bf6a73 Mon Sep 17 00:00:00 2001
From: Abdullah <134060614+rajaabdullah833@users.noreply.github.com>
Date: Sat, 23 Nov 2024 03:11:15 +0500
Subject: [PATCH 6/7] Delete solution/3300-3399/3357.Minimize the Maximum
Adjacent Element Difference/Solution.py
---
.../Solution.py | 21 -------------------
1 file changed, 21 deletions(-)
delete mode 100644 solution/3300-3399/3357.Minimize the Maximum Adjacent Element Difference/Solution.py
diff --git a/solution/3300-3399/3357.Minimize the Maximum Adjacent Element Difference/Solution.py b/solution/3300-3399/3357.Minimize the Maximum Adjacent Element Difference/Solution.py
deleted file mode 100644
index 21886de6ed3b3..0000000000000
--- a/solution/3300-3399/3357.Minimize the Maximum Adjacent Element Difference/Solution.py
+++ /dev/null
@@ -1,21 +0,0 @@
-class Solution:
- def minimizeMaxDifference(self, nums: List[int], k: int) -> int:
- nums.sort()
- l, r = 0, nums[-1] - nums[0]
-
- def can_minimize(target):
- ops = 0
- for i in range(1, len(nums)):
- if nums[i] - nums[i - 1] > target:
- ops += (nums[i] - nums[i - 1] - 1) // target
- if ops > k:
- return False
- return True
-
- while l < r:
- mid = (l + r) // 2
- if can_minimize(mid):
- r = mid
- else:
- l = mid + 1
- return l
From c4cd3db2e11485f812b88b946a3677c5850b0731 Mon Sep 17 00:00:00 2001
From: Abdullah <134060614+rajaabdullah833@users.noreply.github.com>
Date: Sat, 23 Nov 2024 03:11:28 +0500
Subject: [PATCH 7/7] Delete solution/3300-3399/3357.Minimize the Maximum
Adjacent Element Difference/Solution.java
---
.../Solution.java | 51 -------------------
1 file changed, 51 deletions(-)
delete mode 100644 solution/3300-3399/3357.Minimize the Maximum Adjacent Element Difference/Solution.java
diff --git a/solution/3300-3399/3357.Minimize the Maximum Adjacent Element Difference/Solution.java b/solution/3300-3399/3357.Minimize the Maximum Adjacent Element Difference/Solution.java
deleted file mode 100644
index e18e5b7b9219c..0000000000000
--- a/solution/3300-3399/3357.Minimize the Maximum Adjacent Element Difference/Solution.java
+++ /dev/null
@@ -1,51 +0,0 @@
-public class Solution {
-
- public int minimizeMaxDiff(int[] nums) {
- int left = 0, right = (int) 1e9, result = (int) 1e9;
-
- while (left <= right) {
- int mid = left + (right - left) / 2;
- if (isValid(nums, mid)) {
- result = mid;
- right = mid - 1;
- } else {
- left = mid + 1;
- }
- }
-
- return result;
- }
-
- private boolean isValid(int[] nums, int maxDiff) {
- int prev = nums[0] != -1 ? nums[0] : -1;
-
- for (int i = 1; i < nums.length; i++) {
- int current = nums[i];
- if (current == -1) {
- if (prev != -1) {
- current = Math.max(prev - maxDiff, 1);
- } else {
- current = 1;
- }
- }
- if (prev != -1 && Math.abs(current - prev) > maxDiff) {
- return false;
- }
- prev = current;
- }
- return true;
- }
-
- public static void main(String[] args) {
- Solution solver = new Solution();
-
- int[] nums1 = {1, 2, -1, 10, 8};
- System.out.println(solver.minimizeMaxDiff(nums1));
-
- int[] nums2 = {-1, -1, -1};
- System.out.println(solver.minimizeMaxDiff(nums2));
-
- int[] nums3 = {-1, 10, -1, 8};
- System.out.println(solver.minimizeMaxDiff(nums3));
- }
-}