Mô tả bài toán
Cho danh sách nhị phân nums và số k. Có thể đổi tối đa k số 0 thành 1. Tìm độ dài danh sách con liên tiếp toàn 1 dài nhất.
Ví dụ: nums = [0,1,1,0,0,1,1], k = 2 → đầu ra 6 (lật hai 0 ở giữa thành 1).
Giải thuật (Cửa sổ trượt đếm số 0)
- Khởi tạo
zeros = 0,ans = 0,j = 0. - Duyệt
itừ 0 đếnn-1:- Nếu
nums[i] == 0:zeros += 1. - Khi
zeros > k: nếunums[j] == 0thìzeros -= 1;j += 1. - Cập nhật
ans = max(ans, i - j + 1).
- Nếu
- Trả về
ans.
Ví dụ mã Python
class Solution:
def solve(self, nums, k):
zeros = 0
ans = 0
j = 0
for i, n in enumerate(nums):
zeros += n == 0
while zeros > k:
zeros -= nums[j] == 0
j += 1
if i - j + 1 > ans:
ans = i - j + 1
return ans
ob = Solution()
nums = [0, 1, 1, 0, 0, 1, 1]
k = 2
print(ob.solve(nums, k))
Đầu vào
[0, 1, 1, 0, 0, 1, 1], 2
Đầu ra
6