Минимальная работа, которую необходимо выполнить в день, чтобы выполнить поставленные задачи в течение D дней.
Учитывая массив task[] размера N , обозначающий объем работы, который необходимо выполнить для каждой задачи, проблема состоит в том, чтобы найти минимальный объем работы, который необходимо выполнить в каждый день, чтобы все задачи можно было выполнить не более чем за D дней.
Примечание: В один день работа может выполняться только по одному заданию.
Примеры:
Input: task[] = [3, 4, 7, 15], D = 10
Output: 4
Explanation: Here minimum work to be done is 4.
On 1st day, task[0] = 3 < 4 so this task can only be completed. Because work can be done for only one task on one day.
For task[1] = 4 the task can be completed in 1 day.
Task[2] = 7. Now 4 amount of work can be done in 1 day so to complete this task 2 days are required.
Task[3] = 15, 4 additional days are required.
Total number of days required = 1 + 1 + 2 + 4 = 8 days < D.
So 4 value would be the minimum value.Input: task[] = [30, 20, 22, 4, 21], D = 6
Output: 22
Подход : проблема может быть решена с использованием подхода бинарного поиска, использующего следующую идею:
The minimum work that can be done each day is 1 and the maximum work that can be done is the maximum of the tasks array.
Search on this range and if the mid-value satisfies the condition then move to 1st half of the range else to the second half.
Выполните шаги, упомянутые для реализации подхода:
- Создайте переменную left = 1 , представляющую начальную точку диапазона, переменную right = INT_MIN .
- Запустите цикл от индекса = 0 до индекса = N — 1 и обновите право = макс (право, задача [индекс]).
- Создайте переменную per_day_task = 0 для хранения ответа.
- Запустите условие while с левой <= правой
- создайте переменную mid = left + (right – left)/2.
- если все задачи можно выполнить в течение D дней, выполняя средний объем работы в каждый день, обновите per_day_task = mid и сделайте правильно = mid — 1.
- иначе справа = середина + 1.
- Выведите per_day_task как минимальное количество задач, выполняемых каждый день, чтобы выполнить все задачи.
Ниже приведена реализация вышеуказанного подхода:
Временная сложность: O(N * logN)
Вспомогательное пространство: O(1)