在Java中查找数组的中间元素

use*_*901 7 java arrays

给定一个整数数组,我需要返回一个包含原始数组中间元素的新数组.具体来说,如果原始数组的长度是奇数,则结果将具有一个元素,如果是偶数,则结果将具有两个元素.

这是我现在的代码,适用于偶数长度的数组.如何使它适用于奇数长度的数组?

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,将为您提供数组的中间值.

  • 或者 `int mid = (firstIndex + lastIndex)/2` (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)


Tim*_*sen 5

试试这个代码:

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是偶数还是奇数。