Given an array of integers, I need to return a new array containing the middle element(s) from the original array. Specifically, the result will have one element if the length o
I was going through Java Array docs and found that. It is perfect solution to get mid of an array.
int low = startIndexOfArray; // 0 Normally but can be anything
int high = endIndexOfArray - 1;
int mid = (low + high) >>> 1;
System.out.print("Mid Value OF Array Is "+ mid);
Try this code:
public int[] makeMiddle(int[] nums) {
int[] a;
if (nums.length %2 == 0) {
// even-length array (two middle elements)
a = new int[2];
a[0] = nums[(nums.length/2) - 1];
a[1] = nums[nums.length/2];
} else {
// odd-length array (only one middle element)
a = new int[1];
a[0] = nums[nums.length/2];
}
return a;
}
In your original code, you were not checking whether the length of nums
be even or odd.
I've seen:
Integer midElement(int[] ary, int start, int end) {
if (start < end) {
return null;
}
int mid = (start + end)/2;
return ary[mid];
The above works for any start
index and any end
index. It even checks that invalid inputs were not passed it. The book Cracking The Coding Interview
uses this approach throughout the book in the various relevant problems
public int[] makeMiddle(int[] nums) {
if(nums.length>=2){
if(nums[nums.length-1]%2==0) {
int[] arrEven=new int[2];
arrEven[0]=nums[(nums.length/2)-1];
arrEven[1]=nums[(nums.length/2)];
return arrEven;
}
else {
int[] arrOdd=new int[1];
arrOdd[0]=nums[(nums.length/2)];
return arrOdd;
}
}
return nums;
}
A slightly general solution:
public static int[] midArray(int[] arr) {
int extra = arr.length % 2 == 0? 1 : 0;
int[] a = new int[1 + extra];
int startIndex = arr.length / 2 - extra;
int endIndex = arr.length / 2;
for (int i = 0; i <= endIndex - startIndex; i++) {
a[i] = arr[startIndex + i];
}
return a;
}
Test run:
public static void main(String[] args) {
int[] a = new int[]{1, 2, 3, 4};
int[] b = new int[]{1, 2, 3};
int[] c = new int[]{1, 2};
int[] d = new int[]{1};
System.out.println(Arrays.toString(midArray(a)));
System.out.println(Arrays.toString(midArray(b)));
System.out.println(Arrays.toString(midArray(c)));
System.out.println(Arrays.toString(midArray(d)));
}
Output:
[2, 3]
[2]
[1, 2]
[1]
int mid = firstIndex + (lastIndex-firstIndex)/2
, will give you the mid of the array.