[BAEL-6823] middle of array (#14696)
Co-authored-by: Bhaskar <bhaskar.dastidar@freshworks.com>
This commit is contained in:
parent
8c54cce5d1
commit
e337b6dff3
|
@ -0,0 +1,65 @@
|
||||||
|
package com.baeldung.arraymiddle;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
|
||||||
|
public class MiddleOfArray {
|
||||||
|
int[] middleOfArray(int[] array) {
|
||||||
|
if (ObjectUtils.isEmpty(array) || array.length < 3)
|
||||||
|
return array;
|
||||||
|
int n = array.length;
|
||||||
|
int mid = n / 2;
|
||||||
|
if (n % 2 == 0) {
|
||||||
|
int mid2 = mid - 1;
|
||||||
|
return new int[] { array[mid2], array[mid] };
|
||||||
|
} else {
|
||||||
|
return new int[] { array[mid] };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int[] middleOfArrayWithStartEndNaive(int[] array, int start, int end) {
|
||||||
|
int mid = (start + end) / 2;
|
||||||
|
int n = end - start;
|
||||||
|
if (n % 2 == 0) {
|
||||||
|
int mid2 = mid - 1;
|
||||||
|
return new int[] { array[mid2], array[mid] };
|
||||||
|
} else {
|
||||||
|
return new int[] { array[mid] };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int[] middleOfArrayWithStartEnd(int[] array, int start, int end) {
|
||||||
|
int mid = start + (end - start) / 2;
|
||||||
|
int n = end - start;
|
||||||
|
if (n % 2 == 0) {
|
||||||
|
int mid2 = mid - 1;
|
||||||
|
return new int[] { array[mid2], array[mid] };
|
||||||
|
} else {
|
||||||
|
return new int[] { array[mid] };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int[] middleOfArrayWithStartEndBitwise(int[] array, int start, int end) {
|
||||||
|
int mid = (start + end) >>> 1;
|
||||||
|
int n = end - start;
|
||||||
|
if (n % 2 == 0) {
|
||||||
|
int mid2 = mid - 1;
|
||||||
|
return new int[] { array[mid2], array[mid] };
|
||||||
|
} else {
|
||||||
|
return new int[] { array[mid] };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int medianOfArray(int[] array, int start, int end) {
|
||||||
|
Arrays.sort(array); // for safety. This can be ignored
|
||||||
|
int mid = (start + end) >>> 1;
|
||||||
|
int n = end - start;
|
||||||
|
if (n % 2 == 0) {
|
||||||
|
int mid2 = mid - 1;
|
||||||
|
return (array[mid2] + array[mid]) / 2;
|
||||||
|
} else {
|
||||||
|
return array[mid];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,89 @@
|
||||||
|
package com.baeldung.arraymiddle;
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class MiddleOfArrayUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenArrayOfEvenLength_whenMiddleOfArray_thenReturn2Values() {
|
||||||
|
int[] array = new int[100];
|
||||||
|
for (int i = 0; i < array.length; i++) {
|
||||||
|
array[i] = i + 1;
|
||||||
|
}
|
||||||
|
int[] expectedMidArray = { 50, 51 };
|
||||||
|
MiddleOfArray middleOfArray = new MiddleOfArray();
|
||||||
|
Assert.assertArrayEquals(expectedMidArray, middleOfArray.middleOfArray(array));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenArrayOfEdgeCaseLength_whenMiddleOfArray_thenReturn2Values() {
|
||||||
|
int[] array = new int[0];
|
||||||
|
int[] expectedMidArray = new int[0];
|
||||||
|
MiddleOfArray middleOfArray = new MiddleOfArray();
|
||||||
|
Assert.assertArrayEquals(expectedMidArray, middleOfArray.middleOfArray(array));
|
||||||
|
|
||||||
|
array = new int[] { 1, 2 };
|
||||||
|
expectedMidArray = new int[] { 1, 2 };
|
||||||
|
|
||||||
|
Assert.assertArrayEquals(expectedMidArray, middleOfArray.middleOfArray(array));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenArrayOfOddLength_whenMiddleOfArray_thenReturnMid() {
|
||||||
|
int[] array = new int[99];
|
||||||
|
for (int i = 0; i < array.length; i++) {
|
||||||
|
array[i] = i + 1;
|
||||||
|
}
|
||||||
|
int[] expectedMidArray = { 50 };
|
||||||
|
MiddleOfArray middleOfArray = new MiddleOfArray();
|
||||||
|
Assert.assertArrayEquals(expectedMidArray, middleOfArray.middleOfArray(array));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenArrayWithStartAndEnd_whenMiddleOfArray_thenReturnMid() {
|
||||||
|
int[] array = new int[100];
|
||||||
|
for (int i = 0; i < array.length; i++) {
|
||||||
|
array[i] = i + 1;
|
||||||
|
}
|
||||||
|
int[] expectedMidArray = { 58 };
|
||||||
|
MiddleOfArray middleOfArray = new MiddleOfArray();
|
||||||
|
Assert.assertArrayEquals(expectedMidArray, middleOfArray.middleOfArrayWithStartEndNaive(array, 55, 60));
|
||||||
|
|
||||||
|
expectedMidArray = new int[] { 58, 59 };
|
||||||
|
Assert.assertArrayEquals(expectedMidArray, middleOfArray.middleOfArrayWithStartEndNaive(array, 56, 60));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenArrayWithStartAndEndOptimized_whenMiddleOfArray_thenReturnMid() {
|
||||||
|
int[] array = new int[100];
|
||||||
|
for (int i = 0; i < array.length; i++) {
|
||||||
|
array[i] = i + 1;
|
||||||
|
}
|
||||||
|
int[] expectedMidArray = { 78 };
|
||||||
|
MiddleOfArray middleOfArray = new MiddleOfArray();
|
||||||
|
Assert.assertArrayEquals(expectedMidArray, middleOfArray.middleOfArrayWithStartEnd(array, 55, 100));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenArrayWithStartAndEndBitwise_whenMiddleOfArray_thenReturnMid() {
|
||||||
|
int[] array = new int[100];
|
||||||
|
for (int i = 0; i < array.length; i++) {
|
||||||
|
array[i] = i + 1;
|
||||||
|
}
|
||||||
|
int[] expectedMidArray = { 78 };
|
||||||
|
MiddleOfArray middleOfArray = new MiddleOfArray();
|
||||||
|
Assert.assertArrayEquals(expectedMidArray, middleOfArray.middleOfArrayWithStartEndBitwise(array, 55, 100));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenArrayWithStartAndEnd_whenMedianOfArray_thenReturnMid() {
|
||||||
|
int[] array = new int[100];
|
||||||
|
for (int i = 0; i < array.length; i++) {
|
||||||
|
array[i] = i + 1;
|
||||||
|
}
|
||||||
|
int expectMedian = 50;
|
||||||
|
MiddleOfArray middleOfArray = new MiddleOfArray();
|
||||||
|
Assert.assertEquals(expectMedian, middleOfArray.medianOfArray(array, 0, 100));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue