[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