Дан слайс целых чисел nums (не отсортирован, числа могут быть отрицательными)
и число target. Найдите непустой подотрезок — непрерывный кусок nums[l..r],
l <= r, — сумма которого равна target. Верните его границы включительно
или ok == false, если такого подотрезка нет.
// SubarraySum ищет l <= r, для которых nums[l]+...+nums[r] == target.
func SubarraySum(nums []int, target int) (l, r int, ok bool)
Если подходящих подотрезков несколько, вернуть можно любой: тест проверяет сумму,
а не совпадение с эталоном.
Примеры
SubarraySum([]int{4, -2, -10, 0, 16, 2}, 6) // 2, 4, true: -10 + 0 + 16 = 6
SubarraySum([]int{6, 8, 14, -6, 4, -10, 2}, 20) // 1, 4, true: 8 + 14 - 6 + 4 = 20
SubarraySum([]int{3, 30, 300}, 330) // 1, 2, true
SubarraySum([]int{1, 2, 3}, 7) // _, _, false
Ограничения: 0 <= len(nums) <= 10^6, |nums[i]| <= 10^9, |target| <= 10^15.
Решение — быстрее O(n²). Вход не изменять.
Устно: почему не работает скользящее окно с двумя указателями? Когда оно сработает?