Сравнение собственных элементов в массиве

#java #arrays #algorithm #methods #compare

#java #массивы #алгоритм #методы #Сравнить

Вопрос:

Я хочу сравнить элементы в массиве. Для каждого элемента, начиная слева направо, найдите первое следующее целое число (y) со значением, большим, чем существующее (x), затем найдите следующее первое целое число (z) со значением, меньшим, чем y (слева направо) целое число от него. Если следующие большие и меньшие значения не равны -1, выведите (y — z) на консоль, иначе выведите-1. Мой код выглядит так. Но мой массив 2, 4, 1, 5, 6 и мой вывод -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 return 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;
}
 

Ответ №1:

Вы ищете это:

 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 amp;amp; j < arr.length - 1; j  ) {
                int y = arr[j];
                if( x < y){
                    for (int w = j   1; !found amp;amp; w < arr.length; w  ){
                        int z = arr[j   1];
                        if (y > z) {
                           answers[i] = (y != -1 amp;amp; z != -1) ?  y - z : -1;
                           found = true;
                       }
                    }
                }
            }
            if(!found)
                answers[i] = -1;
        }
        return answers;
    }
 

Для каждого элемента, начиная слева направо,

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

найдите первое следующее целое число (y) со значением, превышающим существующее (x)

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

затем найдите следующее первое целое число (z) со значением, меньшим, чем у (слева направо) целое число от него.

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

если следующие большие и меньшие значения не равны -1, выведите (y — z) на консоль, иначе выведите-1.

                            answers[i] = (y != -1 amp;amp; 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] amp;amp; 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 amp;amp; 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)));
}
 

Комментарии:

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 одинаково. Согласно вашему другому решению, мои результаты 5 и 4. Я надеюсь, что смогу объяснить, чего я хочу.

2. Для массива 4, 6, 8, 3, 2, 5 какой массив вы хотите вернуть?

3. для 4, 6, 8, 3, 2, 5, 1; Я хочу вернуться 5, 5, -1, 4, 4, -1, -1