Cho danh sách nums (có thể có số âm hoặc 0), tìm tổng lớn nhất của các phần tử không liền kề nhau.
Ví dụ: [3, 5, 7, 3, 6] → kết quả 16 (chọn 3, 7, 6).
Giải thuật (Dynamic Programming O(1) không gian)
- Nếu
: trả về. - Khởi tạo
(tổng max không lấy phần tử trước),(tổng max lấy phần tử trước). - Duyệt
từ 1 đến:.
- Trả về
.
Ví dụ minh họa
class Solution:
def solve(self, nums):
if len(nums) <= 2:
return max(nums)
noTake = 0
take = nums[0]
for i in range(1, len(nums)):
take, noTake = noTake + nums[i], max(noTake, take)
return max(noTake, take)
ob = Solution()
nums = [3, 5, 7, 3, 6]
print(ob.solve(nums)) # Output: 16
Đầu vào
[3, 5, 7, 3, 6]
Đầu ra
16