119- 122 + 124 這周開始理財啦!! 竟然沒湊夠五道 拿下週的來湊 !
阿新 • • 發佈:2021-12-31
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) 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。