java—比较数组中自己的元素

9fkzdhlc  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(304)

我想比较数组中的元素。对于每个元素,从左到右开始,找到值大于现有整数(x)的下一个整数(y),然后找到值小于其y(从左到右)整数的下一个第一个整数(z)。如果next greater和smaller不是-1,则打印(y-z)到控制台,否则打印-1。我的代码是这样的。但是我的数组2,4,1,5,6和我的输出-6,-6,-6,-1。或者我的数组4,3,8,2,1,但是我的输出是-1,-1,-1,-2,-1。
在您的解决方案中,我的输入4、6、8、3、2、5、1和输出0、5、-1、-1、4、0、0,但我的输出必须是4:y=8和z=3,所以y-z= 5 对于6:是一样的,对于8,没有更大的值,y=-1,z=-1,所以返回 -1 ,对于3:y=5和z=1,因此y-z= 4 返回 4 为了 2 是一样的。因此,对于数组{4,6,8,3,2,5,1},我期望输出{5,5,-1,4,4,-1,-1}。

public static int[] comparator(int[] arr) {
    int y = 0;
    int z = 0;
    int[] answers = new int[arr.length];
    for(int i = 0; i<arr.length; i++) {
        for(int j = 0; j<arr.length; j++) {

            if(arr[i] < arr[j]) {
                y = arr[j];
                if(y>arr[j]) {
                    z = arr[j];
                    break;
                }
                answers[i] = z-y;
            }
            else answers[i] = -1;

        }

    }
    return answers;
}
a9wyjsp7

a9wyjsp71#

您正在寻找:

public static int[] comparator(int[] arr) {
        int[] answers = new int[arr.length];
        for(int i = 0; i <arr.length; i++) {
            boolean found = false;
            int x = arr[i];
            for (int j = i + 1; !found && j < arr.length - 1; j++) {
                int y = arr[j];
                if( x < y){
                    for (int w = j + 1; !found && w < arr.length; w++){
                        int z = arr[j + 1];
                        if (y > z) {
                           answers[i] = (y != -1 && z != -1) ?  y - z : -1;
                           found = true;
                       }
                    }
                }
            }
            if(!found)
                answers[i] = -1;
        }
        return answers;
    }

对于每个元素,从左到右,

for(int i = 0; i <arr.length; i++)

查找值大于现有整数(x)的第一个下一个整数(y)

for (int j = i + 1; !found && j < arr.length - 1; j++) {
            int y = arr[j];
            if( x < y){

然后找到下一个值小于其y(从左到右)整数的第一个整数(z)。

for (int w = j + 1; !found && w < arr.length; w++){
                        int z = arr[j + 1];
                        if (y > z) {

如果next greater和smaller不是-1,则打印(y-z)到控制台,否则打印-1。

answers[i] = (y != -1 && z != -1) ?  y - z : -1;
                           found = true;
                       }
                    }
                }
            }
            if(!found)
                answers[i] = -1;

代码可简化为:

public static int[] comparator(int[] arr) {
    int[] answers = Arrays.stream(arr).map(i -> -1).toArray();
    for(int i = 0; i <arr.length; i++)
        for (int j = i + 1; j < arr.length - 1; j++)
            if (arr[i] < arr[j] && isElementFound(arr, answers, i, j))
                break;
    return answers;
}

private static boolean isElementFound(int[] arr, int[] answers, int i, int j) {
    for (int w = j + 1; w < arr.length; w++)
        if (arr[j] > arr[j + 1]) {
            answers[i] = (arr[j] != -1 && arr[j + 1] != -1) ? arr[j] - arr[j + 1] : -1;
            return true;
        }
    return false;
}

测试和测试:

public static void main(String[] args) {
    int[] arr = new int[]{ 4, 6, 8, 3, 2, 5, 1};
    System.out.println(Arrays.toString(comparator(arr)));
    int[] arr2 = new int[] { 4, 3, 8, 2, 1 };
    System.out.println(Arrays.toString(comparator(arr2)));
}

相关问题