Mô tả bài toán
Cho danh sách nums, số nguyên k và target. Đếm số danh sách con liên tiếp độ dài k có giá trị trung bình ≥ target.
Ví dụ: nums = [1, 10, 5, 6, 7], k = 3, target = 6 → đầu ra 2 (sublist [1,10,7] trung bình 6, [10,5,6] trung bình 7).
Giải thuật (Cửa sổ trượt)
- Chuyển điều kiện trung bình ≥ target thành tổng ≥ target * k.
- Khởi tạo
sum = 0,ans = 0. - Duyệt qua chỉ số
ivà giá trịn:- Nếu
i >= k: trừnums[i - k]khỏisum. - Cộng
nvàosum. - Nếu
i >= k - 1vàsum >= target * k: tăngans.
- Nếu
- Trả về
ans.
Ví dụ mã Python
class Solution:
def solve(self, nums, k, target):
target *= k
sum = 0
ans = 0
for i, n in enumerate(nums):
if i >= k:
sum -= nums[i - k]
sum += n
if i >= (k - 1):
if sum >= target:
ans += 1
return ans
ob = Solution()
nums = [1, 10, 5, 6, 7]
k = 3
target = 6
print(ob.solve(nums, k, target))
Đầu vào
[1, 10, 5, 6, 7], 3, 6
Đầu ra
2