给定一个整数数组,我需要返回一个包含原始数组中间元素的新数组.具体来说,如果原始数组的长度是奇数,则结果将具有一个元素,如果是偶数,则结果将具有两个元素.
这是我现在的代码,适用于偶数长度的数组.如何使它适用于奇数长度的数组?
public int[] makeMiddle(int[] nums) {
int[] a = new int[2];
if(nums.length>1) {
a[1]=nums[nums.length/2];
a[0]=nums[nums.length/2-1];
return a;
} else {
a[2]=nums[((nums.length+1)/2) -1];
}
return a;
}
Run Code Online (Sandbox Code Playgroud)
小智 12
int mid = firstIndex +(lastIndex-firstIndex)/ 2,将为您提供数组的中间值.
小智 10
start + (end - start) / 2 优于(start + end) / 2. 如果使用时(start + end) / 2start+end的求和结果大于整数最大值,则会导致溢出。
public class MidOfArray {
static final int start = Integer.MAX_VALUE;
static final int end = Integer.MAX_VALUE;
public static void doesnotWork() {
int mid = (start + end) / 2;
System.out.println(mid); // output: -1
}
public static void worksGreat() {
int mid = start + ((end + start) / 2);
System.out.println(mid); // output: 2147483646
}
public static void main(String[] args) {
doesnotWork();
worksGreat();
}
}
Run Code Online (Sandbox Code Playgroud)
试试这个代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
在原始代码中,您没有检查长度nums是偶数还是奇数。