Как получить минимальное значение LocalDateTime из массива в Java

У меня есть массив:

LocalDateTime[] onTimes

Я хотел бы найти эффективный способ (без итерации) найти минимальное значение LocalDateTime.

Есть ли быстрый способ сделать это?

Если вы хотите получить минимальный элемент несортированного массива, вам нужно проверить каждый элемент. Если вам нужно сделать это быстрее, используйте другую структуру данных (минимальную кучу, дерево и т. д.), чтобы убедиться, что массив отсортирован.

dan1st 20.11.2022 17:08

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

Yonatan Karp-Rudin 20.11.2022 17:10
Collections.min(Arrays.asList(onTimes)). Выдает исключение, если массив имеет длину 0 или содержит null, поэтому сначала следует убедиться, что это не так.
Ole V.V. 20.11.2022 18:45
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Как включить TLS в gRPC-клиенте и сервере : 2
Как включить TLS в gRPC-клиенте и сервере : 2
Здравствуйте! 🙏🏻 Надеюсь, у вас все хорошо и добро пожаловать в мой блог.
Сортировка hashmap по значениям
Сортировка hashmap по значениям
На Leetcode я решал задачу с хэшмапой и подумал, что мне нужно отсортировать хэшмапу по значениям.
0
3
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Возможно, вы могли бы использовать рекурсию; но я бы не рекомендовал это для производительности. Лучший способ, который я могу придумать, - это использовать потоки API, например

LocalDateTime min = Arrays.stream(onTimes).min(Comparator.naturalOrder())
        .orElseThrow();

Примечание. Это по-прежнему выполняет внутреннюю итерацию всех элементов, чтобы найти минимум.

Для полноты картины; сделать это без итерации, как я уже сказал, можно было бы сделать рекурсивно.

public static LocalDateTime getMinimum(LocalDateTime[] onTimes) {
    return getMinimum(onTimes, 0);
}

private static LocalDateTime getMinimum(LocalDateTime[] onTimes, int i) {
    if (i + 1 < onTimes.length) {
        return min(onTimes[i], getMinimum(onTimes, i + 1));
    } else {
        return onTimes[i];
    }
}

private static LocalDateTime min(LocalDateTime a, LocalDateTime b) {
    if (a.compareTo(b) <= 0) {
        return a;
    }
    return b;
}

Обратите внимание, что это также проверяет все элементы и, по сути, просто скрывает итерацию.

dan1st 20.11.2022 17:09

Хммм, потоки — это то, что мне нужно изучить немного больше. Хотя он «скрывает» итерацию, он выглядит чертовски лучше!

user7880305 20.11.2022 17:12

@ElliottFrisch, что такое компаратор?

user7880305 20.11.2022 17:17

@JoshuaCastelino java.util.Comparator.

Elliott Frisch 20.11.2022 17:17

Другие вопросы по теме

Похожие вопросы