1. 程式人生 > 其它 >119- 122 + 124 這周開始理財啦!! 竟然沒湊夠五道 拿下週的來湊 !

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)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。