Minimize the Heights Java
- Get link
- X
- Other Apps
PROGRAM TO MINIMIZE THE MAXIMUM DIFFERENCE BETWEEN THE HEIGHTS
import
java.util.*;
class
GFG {
// Modifies the array by subtracting/adding
// k to every element such that the difference
// between maximum and minimum is minimized
static
int
getMinDiff(
int
arr[],
int
n,
int
k)
{
if
(n ==
1
)
return
0
;
// Sort all elements
Arrays.sort(arr);
// Initialize result
int
ans = arr[n-
1
] - arr[
0
];
// Handle corner elements
int
small = arr[
0
] + k;
int
big = arr[n-
1
] - k;
int
temp =
0
;
if
(small > big)
{
temp = small;
small = big;
big = temp;
}
// Traverse middle elements
for
(
int
i =
1
; i < n-
1
; i ++)
{
int
subtract = arr[i] - k;
int
add = arr[i] + k;
// If both subtraction and addition
// do not change diff
if
(subtract >= small || add <= big)
continue
;
// Either subtraction causes a smaller
// number or addition causes a greater
// number. Update small or big using
// greedy approach (If big - subtract
// causes smaller diff, update small
// Else update big)
if
(big - subtract <= add - small)
small = subtract;
else
big = add;
}
return
Math.min(ans, big - small);
}
// Driver function to test the above function
public
static
void
main(String[] args)
{
int
arr[] = {
4
,
6
};
int
n = arr.length;
int
k =
10
;
System.out.println(
"Maximum difference is "
+
getMinDiff(arr, n, k));
}
}
OUTPUT:
5
- Get link
- X
- Other Apps
Comments
Post a Comment