From bce06d2c63ff153eb81643586eede918894933d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E8=8B=B1=E6=9D=B0?= <327782001@qq.com> Date: Tue, 11 Jul 2023 10:23:39 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E6=9C=80=E5=A4=A7=E5=AD=90=E5=BA=8F?= =?UTF-8?q?=E5=88=97=E4=BA=A4=E6=9B=BF=E5=92=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../day04/problem_solving_06.py" | 1 - .../day04/problem_solving_07.py" | 1 - .../day04/problem_solving_08_01.py" | 23 +++++++++++++++ .../day04/problem_solving_08_02.py" | 28 +++++++++++++++++++ 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 "01-\346\225\260\347\273\204/day04/problem_solving_08_01.py" create mode 100644 "01-\346\225\260\347\273\204/day04/problem_solving_08_02.py" diff --git "a/01-\346\225\260\347\273\204/day04/problem_solving_06.py" "b/01-\346\225\260\347\273\204/day04/problem_solving_06.py" index 555ed05..cb36ebf 100644 --- "a/01-\346\225\260\347\273\204/day04/problem_solving_06.py" +++ "b/01-\346\225\260\347\273\204/day04/problem_solving_06.py" @@ -1,7 +1,6 @@ """ 两数之和 II - 输入有序数组 """ -import heapq from typing import List diff --git "a/01-\346\225\260\347\273\204/day04/problem_solving_07.py" "b/01-\346\225\260\347\273\204/day04/problem_solving_07.py" index c0f8f76..0cc542a 100644 --- "a/01-\346\225\260\347\273\204/day04/problem_solving_07.py" +++ "b/01-\346\225\260\347\273\204/day04/problem_solving_07.py" @@ -1,7 +1,6 @@ """ 最接近的三数之和 """ -import heapq from typing import List diff --git "a/01-\346\225\260\347\273\204/day04/problem_solving_08_01.py" "b/01-\346\225\260\347\273\204/day04/problem_solving_08_01.py" new file mode 100644 index 0000000..06f4152 --- /dev/null +++ "b/01-\346\225\260\347\273\204/day04/problem_solving_08_01.py" @@ -0,0 +1,23 @@ +""" +最大子序列交替和 +""" +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) diff --git "a/01-\346\225\260\347\273\204/day04/problem_solving_08_02.py" "b/01-\346\225\260\347\273\204/day04/problem_solving_08_02.py" new file mode 100644 index 0000000..e7dd004 --- /dev/null +++ "b/01-\346\225\260\347\273\204/day04/problem_solving_08_02.py" @@ -0,0 +1,28 @@ +""" +最大子序列交替和 +""" +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) -- GitLab