Mô tả bài toán
Cho danh sách nums và số k. Phải xóa đúng k phần tử, mỗi lần xóa từ đầu hoặc cuối. Tìm tổng lớn nhất của các phần tử bị xóa.
Ví dụ: nums = [2, 4, 5, 3, 1], k = 2 → đầu ra 6 (xóa 2 và 4).
Giải thuật (Cửa sổ trượt)
window = sum(nums[:k]),ans = window.- Với
itừ 1 đếnk:window -= nums[k - i](bỏ phần tử từ đầu).window += nums[-i](thêm phần tử từ cuối).ans = max(ans, window).
- Trả về
ans.
Ví dụ mã Python
class Solution:
def solve(self, nums, k):
window = sum(nums[:k])
ans = window
for i in range(1, k + 1):
window -= nums[k - i]
window += nums[-i]
ans = max(ans, window)
return ans
ob = Solution()
nums = [2, 4, 5, 3, 1]
k = 2
print(ob.solve(nums, k))
Đầu vào
[2, 4, 5, 3, 1], 2
Đầu ra
6