Как найти в одной l oop наибольшую разницу между всеми парами в массиве - PullRequest
0 голосов
/ 02 марта 2020

У меня есть упражнение на Java, написание метода (как следует), который получает в качестве параметров массив с числами и int x и возвращает true, если в массиве есть пара чисел (не должно быть в следующем порядок), что его абсолютная разница больше, чем x.

, например, для массива {1, 5, 2, 18, 4, 2, 11}, и я могу использовать только один l oop. спасибо за помощь

public boolean difference (int[] a, int x)

Ответы [ 4 ]

1 голос
/ 02 марта 2020

Алгоритм: Иметь самую маленькую и самую большую переменную, инициализированную наименьшим и наибольшим возможным значениям. L oop через все элементы и, если меньше, чем наименьшее или больше, чем наибольшее, обновите соответствующие переменные. Затем в конце l oop сравните x с наибольшим - наименьшим.

1 голос
/ 02 марта 2020
  • Объявите два целых числа, одно с максимальным значением int, которое может быть, другое с минимальным значением int, которое может быть
  • Используйте один l oop для итерации массива

    • Если текущий элемент больше минимального, сделайте min равным текущему элементу
    • Если текущий элемент меньше максимального, сделайте максимальное равным текущему элементу
  • Когда l oop закончится, определите разницу между минимальным и максимальным

  • Распечатайте сообщение, если разница больше X

Я не написал для вас java, потому что я думаю, что это академическое c упражнение, возможно домашнее задание. Вы получите от этого больше пользы в качестве учебного упражнения, если будете делать это самостоятельно - возьмите этот алгоритм, поместите его в качестве комментариев и напишите код для него. Мы (и ваш руководитель) будем здесь для вас, если вы застряли. Думайте о комментариях так же, как при сдаче экзамена, и бригадир / репетитор говорит «покажите свою работу» - важно показать вашу работу, потому что:

  • Вы все равно можете получить баллы за правильную идею, даже если это неправильная реализация
  • Ваш преподаватель может видеть, где вы ошиблись, что также является обратной связью для лучшего преподавания и для ваших конкретных c обучения
  • Как создание плана для написания эссе, комментариев алгоритма помогают избежать ошибок и помогают забыть, что должен делать каждый раздел кода. Я легко потеряюсь при попытке написать новый язык, а также придумаю алгоритм

Всегда пишу комментарии

0 голосов
/ 15 марта 2020

Найти наибольшую разницу между всеми парами чисел в массиве - это то же самое, что найти разницу между наибольшим и наименьшим значением. Таким образом, вам нужно только найти наибольшее и наименьшее значение. Естественно, Java уже делает это за вас:

import java.util.Arrays;
import java.util.IntSummaryStatistics;

public class Main {
    public static void main(String[] args) {
        int[] a = {1, 5, 2, 18, 4, 2, 11};
        System.out.println(difference(a, 16));
        System.out.println(difference(a, 17));
    }

    public static boolean difference(int[] a, int x) {
        IntSummaryStatistics stat = Arrays.stream(a).summaryStatistics();
        return (stat.getMax() - stat.getMin()) > x;
    }
}

Это приводит к следующему выводу:

true
false
0 голосов
/ 03 марта 2020

Здесь немного другой подход.

    public static void main(String[] args) {
        int[] a = {1,2,3,4,5,6,7};
        System.out.println(difference(5,a));
    }

    static boolean difference(int[] a, int x) {
        int min = a[0];
        int max = min;
        for (int i = 1; i < a.length; i++) {
            int v = a[i];
            if (v < min) {
                min = v;
            } else if (v > max) {
                max = v;
            }
            // check here since it may not be 
            // necessary to iterate thru all values.

            if (max - min > x) {
                return true;
            }
        }    
        return false;
    }

Он оптимизирован несколькими способами.

  1. Минимальные и максимальные значения установлены для первого элемента в списке. Таким образом, итерация начинается со второго элемента.
  2. Поскольку вам не нужна самая большая разница, delta из min and max проверяется на каждой итерации, так как может не потребоваться выполнять итерацию по всему списку.
  3. А поскольку по определению max > min абсолютное значение неявно, даже для отрицательных чисел.
...