Жадные алгоритмы в двух методах указателей (быстрый и медленный запуск)

#java #algorithm

#java #алгоритм

Вопрос:

Я изучаю технику с двумя указателями в технике с двумя указателями — Сценарий II

Он ввел указатель быстрого запуска и указатель медленного запуска для перемещения элементов и возврата новой длины

 public int removeElement(int[] nums, int val) {
    int k = 0;
    for (int i = 0; i < nums.length;   i) {
        if (nums[i] != val) {
            nums[k] = nums[i];
            k  ;
        }
    }
    return k;
}
 

Ниже приводится краткое изложение:

Это очень распространенный сценарий использования метода с двумя указателями, когда вам нужно:

Один медленный и один быстрый запуск одновременно.

Ключом к решению такого рода проблем является

Определите стратегию перемещения для обоих указателей.

Подобно предыдущему сценарию, вам иногда может потребоваться sort массив перед использованием метода с двумя указателями. И вам может понадобиться greedy подумать, чтобы определить свою стратегию движения.

Ссылка на

И вам может понадобиться greedy подумать, чтобы определить свою стратегию движения.

Это сбивает с greedy толку, поскольку мы greedy считаем фундаментальные жадные алгоритмы само собой разумеющимися.

Какие виды жадных алгоритмов могут быть использованы в двух указателях?

Не могли бы вы помочь примером?

введите описание изображения здесь

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

1. Вы ссылаетесь на сайт, защищенный паролем. Пожалуйста, ссылайтесь только на общедоступный контент.

2. «Не могли бы вы помочь примером?» Для «Сценария II» есть 3 теста, а тесты 2 ( максимум последовательных ) и 3 ( сумма подмассивов минимального размера ) являются примерами для жадного алгоритма. Они намекают на «жадный» на странице, которую вы показываете, потому что вам это нужно для тестов.

Ответ №1:

Какие виды жадных алгоритмов могут быть использованы в двух указателях?

Рассмотрим эту проблему 3sum в LeetCode.

Эта проблема требует сортировки входного массива перед применением метода двух указателей. Когда вы сортируете входной массив в некотором порядке, это довольно жадный способ решения проблемы.

Рассмотрим другой проблемный контейнер с наибольшим количеством воды в LeetCode.

Я не хочу давать вам спойлерное решение этой проблемы, если вы ее еще не решили. Но чтобы дать вам некоторое представление о том, как это связано с жадным подходом, вам нужно переместить левый и правый указатель на основе некоторого сравнения между числами, которое на самом деле является «жадным».