119- 122 + 124 这周开始理财啦!! 竟然没凑够五道 拿下周的来凑 !
119 杨辉三角2
一行一行往下推
class Solution: def getRow(self, rowIndex: int) -> List[int]: if rowIndex == 0: return [1] if rowIndex == 1: return [1,1] rel = [1,1] for i in range(rowIndex-1): currel = [1] for index,_ in enumerate(rel[:-1]): currel.append(rel[index]+ rel[index+1]) currel.append(1) rel=currel return rel 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/pascals-triangle-ii/solution/wang-shi-wu-xu-zai-ti-qian-xing-zhi-shen-7p8c/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
120:三角形最小路径和
回溯伤我千万遍,我待回溯如初恋
n = len(triangle) dp = [10**4+1]*(n) dp[0] = triangle[0][0] for i in range(1,n): #看第i 行 for j in range(i,-1,-1): #看第j列 if j == 0: dp[j] = triangle[i][j]+dp[0] else: dp[j] = triangle[i][j] + min(dp[j],dp[j-1]) return min(dp) 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/triangle/solution/hui-su-shang-wo-qian-mo-bian-wo-dai-hui-f493p/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
121 卖股票最佳时机
维持一个当前最大利润和前面的最小值。
如果当前值比最小值小 更新最小值
如果不小 就减去最小值看利润。
注意else 让我们包涵了股票一直跌的这种情况。
class Solution: def maxProfit(self, prices: List[int]) -> int: minpri = prices[0] maxpro = 0 n = len(prices) for i in range(n): if prices[i] < minpri: minpri = prices[i] elif prices[i] - minpri > maxpro: maxpro = prices[i] - minpri return maxpro 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/solution/wo-zhe-ge-elsejia-de-jian-zhi-jiu-shi-ti-fs2r/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
122 卖股票最佳时机2
遍历一遍
先找到一个比他后一天低的股票 买它! 因为如果他后一天比他还低 肯定买那个更低的
再找到一个比他后一天高的股票 卖它! 因为如果他后一天比他还高 肯定不卖啊
卖出之后重复上面步骤
就得到最大利润啦
class Solution: def maxProfit(self, prices: List[int]) -> int: n = len(prices) def findnextpri(index): for i in range(index,n-1): if prices[i] < prices[i+1]: return i return -1 index = 0 pri = 0 while True: index = findnextpri(index) if index < 0: return pri for j in range(index,n): if j == n-1: pri += prices[j] - prices[index] elif prices[j]>prices[j+1]: pri += prices[j] - prices[index] break index = j 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/solution/mei-xiang-dao-jie-guo-zhe-yao-hao-mo-mo-xji48/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
123: 二叉树最大路径和
被94的人击败了时间 被95的人击败了空间
但至少是我自己想出来的。
我的dfs会返回两个值 一个是可以与当前结点连接的子树能达到的最大值
另一个是 不管连不连 子树上能达到的最大值 。
sumleft 就是左子树能和当前结点连接
,leftmax 左子树不一定能和当前结点连接。这一部分等于放弃人生前进希望的 就等着看有没有超过他的
怎么实现呢?
rootmax 是三种情况下的最大值:
1 左 + 根
2 右 + 根
3 左 + 右
这三种情况下 都可以继续往上扩展
maxsum 是 各种情况下最大值
除了上面三种外 还包括:
1 左右中
2 左
3 右
4 左子树的任意情况最大
5 右子树上任意最大
递归到根结点
就得到了 带上根节点能得到的最大的
空的时候返回-10000 意思就是直接放弃生活希望的那种
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def maxPathSum(self, root: Optional[TreeNode]) -> int: def dfs(root): if root == None: return -10000,-10000 sumleft,leftmax = dfs(root.left) sumright,rightmax = dfs(root.right) rootmax = max(sumleft+root.val,sumright+root.val,root.val) maxsum = max(sumleft+root.val,sumright+root.val,sumright+sumleft+root.val,root.val,sumleft,sumright,leftmax,rightmax) return rootmax,maxsum a,b = dfs(root) return b 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/solution/hahahahhahahbei-94de-ren-ji-bai-liao-shi-hn7h/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。