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

fix:最大子序列交替和

上级 03d80666
""" """
两数之和 II - 输入有序数组 两数之和 II - 输入有序数组
""" """
import heapq
from typing import List from typing import List
......
""" """
最接近的三数之和 最接近的三数之和
""" """
import heapq
from typing import List 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.
先完成此消息的编辑!
想要评论请 注册