สมมติว่ามีรายการไบนารี (0 และ 1) และตัวเลข k สามารถเปลี่ยน 0 เป็น 1 ได้สูงสุด k ตัว ต้องการหาความยาวสับลิสต์ยาวสุดที่เป็น 1 ทั้งหมด
ตัวอย่าง: nums = [0, 1, 1, 0, 0, 1, 1], k = 2 ผลลัพธ์ 6 เปลี่ยน 0 กลาง 2 ตัวได้ [0, 1, 1, 1, 1, 1, 1]
ขั้นตอนการแก้ปัญหา
zeros = 0, ans = 0, j = 0- วน
i, nในenumerate(nums):zeros += (n == 0)- ขณะ
zeros > k:zeros -= (nums[j] == 0)j += 1
ans = max(ans, i - j + 1)
- คืน
ans
ตัวอย่างโค้ด
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))
อินพุต
[0, 1, 1, 0, 0, 1, 1], 2
เอาต์พุต
6