Add max of mins algorithm (#3044)

This commit is contained in:
Siddhant Swarup Mallick
2022-05-08 14:35:05 +05:30
committed by GitHub
parent 9b5dca5534
commit 10f41eeee9
2 changed files with 93 additions and 0 deletions

View File

@ -0,0 +1,37 @@
/** Author : Siddhant Swarup Mallick
* Github : https://github.com/siddhant2002
*/
/** Program description - Given an integer array. The task is to find the maximum of the minimum of the array */
package com.thealgorithms.datastructures.stacks;
import java.util.*;
public class CalculateMaxOfMin {
public static int calculateMaxOfMin(int[] a) {
int n = a.length;
int[] ans = new int[n];
int[] arr2 = Arrays.copyOf(a, n);
Arrays.sort(arr2);
int maxNum = arr2[arr2.length - 1];
ans[0] = maxNum;
int index = 1;
while (index != ans.length) {
int[] minimums = new int[n - index];
for (int i = 0; i < n - index; i++) {
int[] windowArray = Arrays.copyOfRange(a, i, i + index + 1);
Arrays.sort(windowArray);
int minNum = windowArray[0];
minimums[i] = minNum;
}
Arrays.sort(minimums);
ans[index] = minimums[minimums.length - 1];
index += 1;
}
return ans[0];
}
}
/**
* Given an integer array. The task is to find the maximum of the minimum of the
* given array
*/

View File

@ -0,0 +1,56 @@
package com.thealgorithms.others;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
import com.thealgorithms.datastructures.stacks.CalculateMaxOfMin;
public class CalculateMaxOfMinTest {
@Test
void testForOneElement() {
int a[] = { 10, 20, 30, 50, 10, 70, 30 };
int k = CalculateMaxOfMin.calculateMaxOfMin(a);
assertTrue(k == 70);
}
@Test
void testForTwoElements() {
int a[] = { 5, 3, 2, 6, 3, 2, 6 };
int k = CalculateMaxOfMin.calculateMaxOfMin(a);
assertTrue(k == 6);
}
@Test
void testForThreeElements() {
int a[] = { 10, 10, 10, 10, 10, 10, 10 };
int k = CalculateMaxOfMin.calculateMaxOfMin(a);
assertTrue(k == 10);
}
@Test
void testForFourElements() {
int a[] = { 70, 60, 50, 40, 30, 20 };
int k = CalculateMaxOfMin.calculateMaxOfMin(a);
assertTrue(k == 70);
}
@Test
void testForFiveElements() {
int a[] = { 50 };
int k = CalculateMaxOfMin.calculateMaxOfMin(a);
assertTrue(k == 50);
}
@Test
void testForSixElements() {
int a[] = { 1, 4, 7, 9, 2, 4, 6 };
int k = CalculateMaxOfMin.calculateMaxOfMin(a);
assertTrue(k == 9);
}
@Test
void testForSevenElements() {
int a[] = { -1, -5, -7, -9, -12, -14 };
int k = CalculateMaxOfMin.calculateMaxOfMin(a);
assertTrue(k == -1);
}
}