C Program to Minimize the maximum difference between heights
Minimize the maximum difference between heights in C
Here, in this page we will discuss the program to minimize the maximum difference between heights in C . We are Given with heights of n towers and a value k. We need to either increase or decrease the height of every tower by k (only once) where k > 0. Our task is to minimize the difference between the heights of the longest and the shortest tower after modifications and output this difference.
Algorithm :
- First, Sort the array and make each height of the tower maximum.
- Decreasing the height of all the towers towards the right by k and increasing all the height of the towers towards the left (by k).
- It is also possible that the tower you are trying to increase the height doesn’t have the maximum height.
- Check whether it has the maximum height or not by comparing it with the last element towards the right side which is arr[n]-k.
- Since the array is sorted if the tower’s height is greater than the arr[n]-k then it’s the tallest tower available.
- Similar thing applied for finding the shortest tower.
Code in C
#include <stdio.h>
int min(int a, int b){
if(a>b)
return b;
return a;
}
int max(int a, int b){
if(a<b)
return b;
return a;
}
int getMinDiff(int arr[], int n, int k)
{
//Sort the array
for(int i=0; i<n; i++){
for(int j=i+1; j<n; j++){ if(arr[i]>arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
int ans = arr[n - 1] - arr[0];
int tempmin, tempmax;
tempmin = arr[0];
tempmax = arr[n - 1];
for (int i = 1; i < n; i++) {
tempmin= min(arr[0] + k,arr[i] - k);
tempmax = max(arr[i - 1] + k, arr[n - 1] - k);
ans = min(ans, tempmax - tempmin);
}
return ans;
}
// Driver Code Starts
int main()
{
int k = 6, n = 6;
int arr[] = { 7, 4, 8, 8, 8, 9 };
int ans = getMinDiff(arr, n, k);
printf("%d", ans);
} Output :
5
Prime Course Trailer
Related Banners
Get PrepInsta Prime & get Access to all 200+ courses offered by PrepInsta in One Subscription

Login/Signup to comment