- 买卖股票的最佳时机
思路:在价格最低的时候买入,差价最大的时候卖出
class Solution:
def maxProfit(self, prices: List[int]) -> int:
"""
:type prices: List[int]
:rtype: int
"""
if len(prices) < 2:
return 0
profit = 0
minimum = prices[0]
for i in prices:
minimum = min(i, minimum)
profit = max(i - minimum, profit)
return profit
- 买卖股票的最佳时机 II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
“言简意赅”,能想到下面这个思路太强了!
class Solution:
def maxProfit(self, prices: List[int]) -> int:
"""
:type prices: List[int]
:rtype: int
"""
profit = 0
for i in range(1,len(prices)):
if prices[i] > prices[i-1]:
profit += prices[i]-prices[i-1]
return profit
- 二叉树中的最大路径和
路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径 至少包含一个 节点,且不一定经过根节点。
路径和 是路径中各节点值的总和。
给你一个二叉树的根节点 root ,返回其 最大路径和 。
这道题好难,没看懂要干什么,看了别人的代码才明白。二叉树,学了像,没学一样!
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
max_v = -10e9
def maxPathSum(self, root: TreeNode) -> int:
def getMax(root):
if not root:
return 0
left = getMax(root.left)
right = getMax(root.right)
val1 = root.val
val2 = root.val + left
val3 = root.val + right
val4 = root.val + left + right
# 记录最大值
self.max_v = max([self.max_v, val1, val2, val3, val4])
# 对于当前节点 路径可以包括左子节点和右子节点
# 但是对于父节点,只能使用该节点的左节点或右节点
return max([val1, val2, val3])
# call function
getMax(root)
return self.max_v