Skip to content

Commit d82e356

Browse files
committedNov 28, 2020
feat: maximum-subarray
1 parent ac38984 commit d82e356

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed
 

‎dp.maximum-subarray.py

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
"""
6+
53. 最大子序和
7+
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
8+
"""
9+
def maxSubArray(self, nums: List[int]) -> int:
10+
dp = [0] * len(nums)
11+
dp[0] = nums[0]
12+
res = nums[0]
13+
for i in range(1, len(nums)):
14+
# 表示 nums[i] 结尾的最大子序和
15+
dp[i] = max(nums[i], dp[i - 1] + nums[i])
16+
# 结果未必是以 nums[i] 结尾,所以要取最大值
17+
res = max(res, dp[i])
18+
19+
return res
20+
21+
22+
23+
so = Solution()
24+
# 6
25+
print(so.maxSubArray([-2,1,-3,4,-1,2,1,-5,4]))

‎dp.triangle.py

+11-1
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,18 @@ class Solution:
88
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
99
相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。
1010
"""
11-
# dfs
1211
def minimumTotal(self, triangle: List[List[int]]) -> int:
12+
if not triangle:
13+
return 0
14+
15+
for i in range(len(triangle) - 2, -1, -1):
16+
for j in range(len(triangle[i])):
17+
triangle[i][j] += min(triangle[i + 1][j], triangle[i + 1][j + 1])
18+
19+
return triangle[0][0]
20+
21+
# dfs
22+
def minimumTotalByDfs(self, triangle: List[List[int]]) -> int:
1323
def dfs(l, i, j):
1424
if len(l) == i:
1525
return 0

0 commit comments

Comments
 (0)