Сложность: medium
Вам дан целочисленный массив nums. За один ход вы можете выбрать индекс i, где 0 <= i < nums.length, и увеличить nums[i] на 1. Верните минимальное количество ходов, чтобы каждое значение в nums было уникальным. Тестовые примеры генерируются так, чтобы ответ умещался в 32-битное целое число.
Пример:
Input: nums = [1,2,2]
Output: 1
👨💻 Алгоритм:
1⃣Отсортировать массив nums.
Инициализировать переменную moves для подсчета количества ходов.
2⃣Пройти по массиву и для каждого элемента, начиная со второго:
Если текущий элемент меньше или равен предыдущему элементу, увеличить текущий элемент до значения предыдущего элемента + 1 и обновить счетчик ходов.
3⃣Вернуть общее количество ходов.
😎 Решение:
function minIncrementForUnique($nums) {
sort($nums);
$moves = 0;
for ($i = 1; $i < count($nums); $i++) {
if ($nums[$i] <= $nums[$i - 1]) {
$moves += $nums[$i - 1] + 1 - $nums[$i];
$nums[$i] = $nums[$i - 1] + 1;
}
}
return $moves;
}Ставь 👍 и забирай 📚 Базу знаний