Сложность: 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⃣Вернуть общее количество ходов.
😎 Решение:
class Solution {
func minIncrementForUnique(_ nums: [Int]) -> Int {
var nums = nums.sorted()
var moves = 0
for i in 1..<nums.count {
if nums[i] <= nums[i - 1] {
moves += nums[i - 1] + 1 - nums[i]
nums[i] = nums[i - 1] + 1
}
}
return moves
}
}Ставь 👍 и забирай 📚 Базу знаний