提交 bce06d2c 编写于 作者: 檀越@新空间's avatar 檀越@新空间 🐭

fix:最大子序列交替和

上级 03d80666
"""
两数之和 II - 输入有序数组
"""
import heapq
from typing import List
......
"""
最接近的三数之和
"""
import heapq
from typing import List
......
"""
最大子序列交替和
"""
from typing import List
class Solution:
def maxAlternatingSum(self, nums: List[int]) -> int:
"""
最大子序列交替和:偶数尽量大,奇数尽量小,且最后一个奇数可以不要
可以使用贪心算法
:param nums:
:return:
"""
res = nums[0]
for i in range(1, len(nums)):
res += max(nums[i] - nums[i - 1], 0)
return res
if __name__ == '__main__':
result = Solution().maxAlternatingSum([-4, 6, 5, 3])
print(result)
"""
最大子序列交替和
"""
from typing import List
class Solution:
def maxAlternatingSum(self, nums: List[int]) -> int:
"""
动态规划 打家劫舍 背包问题
even 偶数
odd 奇数
"""
even, odd = 0, nums[0] # 偶数`长度`子序列的最大交替和,初始为0;奇数`长度`子序列的最大交替和,初始为首个元素
res = odd # 所有子序列的最大最大交替和,由于元素非负,因此初始为even和odd的最大值即为odd=nums[0]
for i in range(1, len(nums)):
# 从第二个元素开始进行动规
# 动态规划更新even和odd
even = max(even, odd - nums[i])
odd = max(odd, even + nums[i])
# 更新最大最大交替和
res = max(res, even, odd)
return res
if __name__ == '__main__':
result = Solution().maxAlternatingSum([4, 6, 5, 3])
print(result)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册