Сложность: medium
Целочисленный массив называется арифметическим, если он состоит не менее чем из трех элементов и если разность между любыми двумя последовательными элементами одинакова. Например, [1,3,5,7,9], [7,7,7] и [3,-1,-5,-9] являются арифметическими последовательностями. Если задан целочисленный массив nums, верните количество арифметических подмассивов массива nums. Подмассив - это непрерывная подпоследовательность массива.
Пример:
Input: nums = [1,2,3,4]
Output: 3
👨💻 Алгоритм:
1⃣Пройдите по массиву, инициализируя два указателя: начальный и текущий. Начните с первой пары элементов.
2⃣Для каждой пары элементов проверяйте, сохраняется ли разность между последовательными элементами. Если да, увеличивайте длину текущей арифметической последовательности. Если нет, сбрасывайте начальную позицию и начинайте новую последовательность.
3⃣Суммируйте количество найденных арифметических подмассивов, учитывая, что для каждого арифметического подмассива длины len, количество таких подмассивов равно (len - 2).
😎 Решение:
func numberOfArithmeticSlices(_ nums: [Int]) -> Int {
guard nums.count >= 3 else { return 0 }
var count = 0
var currentLength = 0
for i in 2..<nums.count {
if nums[i] - nums[i - 1] == nums[i - 1] - nums[i - 2] {
currentLength += 1
count += currentLength
} else {
currentLength = 0
}
}
return count
}Ставь 👍 и забирай 📚 Базу знаний
