Leetcode第132場周賽題目學習

2021-09-19 07:00:58 字數 4732 閱讀 4426

愛麗絲和鮑勃一起玩遊戲,他們輪流行動。愛麗絲先手開局。

最初,黑板上有乙個數字n。在每個玩家的回合,玩家需要執行以下操作:

如果玩家無法執行這些操作,就會輸掉遊戲。

只有在愛麗絲在遊戲中取得勝利時才返回true,否則返回false。假設兩個玩家都以最佳狀態參與遊戲。

示例1:

輸入:2

輸出:true

解釋:愛麗絲選擇 1,鮑勃無法進行操作。

示例2:

輸入:3

輸出:false

解釋:愛麗絲選擇 1,鮑勃也選擇 1,然後愛麗絲無法進行操作。

如果當前數n對於愛麗絲先手為勝,則對於愛麗絲後手則為負,故對於乙個新的數n,愛麗絲需要選擇乙個合適的除數x,使得n-x後新的n對鮑勃來說為負,如此方可勝利。

因此,對於n,遍歷n的除數,然後判斷n-x的結果是否為負,若存在乙個x,使得n-x為勝,則愛麗絲可以獲勝。

現已知n=2時,愛麗絲勝,n=3時,愛麗絲負。則當n=4時,滿足要求的除數有12。當愛麗絲選擇1時,n=n-1=3。因為n=3時,先手的無論怎麼選,都是負,因此鮑勃一定輸。因此愛麗絲選1時會勝。當愛麗絲選擇2時,n=n-2=2n=2時,先手的一定勝,故鮑勃一定會勝,因此愛麗絲負。故可知,n=4時,愛麗絲會獲勝。以此類推即可。

class

solution

:def

divisorgame

(self, n:

int)

->

bool

: n=

[false

,false

,true

,false

]if n<4:

return n[n]

else

:for i in

range(4

,n+1):

ans=

false

for j in

range(1

,i):

if i%j==0:

ans=ans or

(not n[i-j]

)return n[n]

給定二叉樹的根節點root,找出存在於不同節點ab之間的最大值v,其中v = |a.val - b.val|,且ab的祖先。(如果 a 的任何子節點之一為 b,或者 a 的任何子節點是 b 的祖先,那麼我們認為 a 是 b 的祖先)

示例:

輸入:[8,3,10,1,6,null,14,null,null,4,7,13]

輸出:7

解釋:

我們有大量的節點與其祖先的差值,其中一些如下:

|8 - 3| = 5

|3 - 7| = 4

|8 - 1| = 7

|10 - 13| = 3

在所有可能的差值中,最大值 7 由 |8 - 1| = 7 得出。

樹中的節點數在25000之間。

每個節點的值介於0100000之間。

從根節點開始,同時遍歷左子樹和右子樹。用兩個變數記錄之前層的最大值和最小值,返回這一層和之前的最大值最小值運算後的最大的差值,同時,更新到這一層為止的最大值和最小值,最終即可得到結果。

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

intmaxancestordiff

(treenode* root)

};

給定乙個整數陣列 a,返回 a 中最長等差子串行的長度

回想一下,a的子串行是列表a[i_1], a[i_2], ..., a[i_k]其中0 <= i_1 < i_2 < ... < i_k <= a.length - 1。並且如果b[i+1] - b[i]( 0 <= i < b.length - 1)的值都相同,那麼序列b是等差的。

示例1:

輸入:[3,6,9,12]

輸出:4

解釋:

整個陣列是公差為 3 的等差數列。

示例2:

輸入:[9,4,7,2,10]

輸出:3

解釋:最長的等差子串行是 [4,7,10]。

示例3:

輸入:[20,1,15,3,10,5,8]

輸出:4

解釋:最長的等差子串行是 [20,15,10,5]。

2 <= a.length <= 20000 <= a[i] <= 10000如果a的長度小於3,則直接返回a的長度。否則,預設初始長度為2,遍歷a。對於每個數,計算其與後面數的公差,如果存在乙個等差序列,則記錄其長度。最後返回最長的序列即可。具體實現見參考**。

class

solution}if

(count > maxlen)}}

return maxlen;}}

;

我們從二叉樹的根節點root開始進行深度優先搜尋。

在遍歷中的每個節點處,我們輸出d條短劃線(其中d是該節點的深度),然後輸出該節點的值。(如果節點的深度為d,則其直接子節點的深度為d + 1。根節點的深度為0)。

如果節點只有乙個子節點,那麼保證該子節點為左子節點。

給出遍歷輸出s,還原樹並返回其根節點root

示例1:

輸入:"1-2--3--4-5--6--7"

輸出:[1,2,5,3,4,6,7]

輸入:"1-2--3---4-5--6---7"

輸出:[1,2,5,3,null,6,null,4,null,7]

輸入:"1-401--349---90--88"

輸出:[1,401,null,349,88,90]

首先,解析字串,獲取每個節點的數值和深度。

隨後由上至下,根據節點的深度建立樹。

具體實現配合參考**講解

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

,d[1005];

treenode*

work

(int l,

int r)

treenode*

recoverfrompreorder

(string s)

return

work(1

,n);}}

;

其中:

int a[

1005]=

,d[1005

];

a用於記錄節點的值,b用於記錄節點的深度。

分析主函式:

treenode*

recoverfrompreorder

(string s)

return

work(1

,n);

}

其中,n用於記錄節點數目。

for迴圈用於解析字串。如果遇到的是』-』,則j增加,當迴圈條件不滿足時,記錄節點的深度。

當遇到數字時,當前節點的值通過如下方式計算:

接下來分析核心部分:

treenode*

work

(int l,

int r)

其中的mid是判斷下一層的下一層的起點。每次建立乙個節點,隨後遞迴建立其左子樹和右子樹。

leetcode 第132場周賽

愛麗絲和鮑勃一起玩遊戲,他們輪流行動。愛麗絲先手開局。最初,黑板上有乙個數字n。在每個玩家的回合,玩家需要執行以下操作 如果玩家無法執行這些操作,就會輸掉遊戲。只有在愛麗絲在遊戲中取得勝利時才返回true,否則返回false。假設兩個玩家都以最佳狀態參與遊戲。示例 1 輸入 2輸出 true解釋 愛...

leetcode周賽 第176場

題目描述 給你乙個 m n 的矩陣 grid,矩陣中的元素無論是按行還是按列,都以非遞增順序排列。請你統計並返回 grid 中 負數 的數目。示例 1 輸入 grid 4,3,2,1 3,2,1,1 1,1,1,2 1,1,2,3 輸出 8 解釋 矩陣中共有 8 個負數。示例 2 輸入 grid 3...

leetcode 第 180 場周賽

大佬都是3 5分鐘一題,而我10分鐘一題,最後一題還不會。qaq 5356.矩陣中的幸運數 給你乙個m n的矩陣,矩陣中的數字各不相同。請你按任意順序返回矩陣中的所有幸運數。幸運數是指矩陣中滿足同時下列兩個條件的元素 class solution object def luckynumbers se...