1. 程式人生 > >記第一次參加leecode競賽

記第一次參加leecode競賽

spa 條件 imu list bsp 輸出 錯誤 range 解釋

雖然僅僅只是完成了第一小題,但是這畢竟是第一次嘛

第二題是跟樹有關的,沒看明白,先留坑

給出二叉搜索樹的根節點,該二叉樹的節點值各不相同,修改二叉樹,使每個節點 node 的新值等於原樹中大於或等於 node.val 的值之和。

提醒一下,二叉搜索樹滿足下列約束條件:

  • 節點的左子樹僅包含鍵小於節點鍵的節點。
  • 節點的右子樹僅包含鍵大於節點鍵的節點。
  • 左右子樹也必須是二叉搜索樹。

第三題是多邊形裏面畫三角形然後三個頂點乘積求和求最小值的劃分,這裏思考嘗試了,但是失敗了。。。先把自己的貼上來

class Solution:
    def minScoreTriangulation(self, A: List[int]) -> int:
        n
=len(A) if(n==3): return A[0]*A[1]*A[2] else: for b in range(n-2): sum=0 p=A[0]*A[b+1]*A[b+2] sum+=p min=sum for a in range(n): for b in range(n-2): sum
=0 p=A[a]*A[b+1]*A[b+2] sum+=p if(sum<min): min=sum return min

這個錯誤的點就在於求乘積時,頂點沒有改變,但是我暫時也不會改

看一下別人的

class Solution:
    def minScoreTriangulation(self, A: list[int]) -> int:
        n = len(A)
        dp 
= [[0 for j in range(n)] for i in range(n)] for step in range(2, n): for i in range(n): j = (i + step) % n dp[i][j] = None for p in range(i + 1, i + step): k = p % n tmp = dp[i][k] + dp[k][j] + A[i] * A[j] * A[k] if (dp[i][j] is None) or (tmp < dp[i][j]): dp[i][j] = tmp ans = None for i in range(n): j = (i + n - 1) % n if (ans is None) or (dp[i][j] < ans): ans = dp[i][j] return ans

說實話,看不明白,留坑

第四題是個搬石子的問題,暫時感覺也想不明白,留坑。

在一個長度無限的數軸上,第 i 顆石子的位置為 stones[i]。如果一顆石子的位置最小/最大,那麽該石子被稱作端點石子。

每個回合,你可以將一顆端點石子拿起並移動到一個未占用的位置,使得該石子不再是一顆端點石子。

值得註意的是,如果石子像 stones = [1,2,5] 這樣,你將無法移動位於位置 5 的端點石子,因為無論將它移動到任何位置(例如 0 或 3),該石子都仍然會是端點石子。

當你無法進行任何移動時,即,這些石子的位置連續時,遊戲結束。

要使遊戲結束,你可以執行的最小和最大移動次數分別是多少? 以長度為 2 的數組形式返回答案:answer = [minimum_moves, maximum_moves]

輸入:[7,4,9]
輸出:[1,2]
解釋:
我們可以移動一次,4 -> 8,遊戲結束。
或者,我們可以移動兩次 9 -> 5,4 -> 6,遊戲結束。

記第一次參加leecode競賽