Leetcode 第190 場周賽題解

2021-10-06 10:30:22 字數 3304 閱讀 4683

本題的關鍵是如何判斷詞的開始位置,根據題目中句子由若干用單個空格分隔的單詞組成的描述,詞首應該符合下述兩個特點中的乙個:

確定詞首位置後,可以通過 std::string::substr 函式取出子串,然後判斷是否與 searchword 是否相同即可。

class

solution}}

return-1

;}};

從 0 到 n-1 列舉 i 作為滑動視窗的右端點。初始時,滑動視窗的左端點 j 為 0,當視窗的大小,即 i-j+1 > k 時,向左移動左端點,即 ++j。

對於每個確定的視窗 [j, i],需要維護母音的數量,當一次移動後,只需o(1)檢查s[i+1],s[j+1]就可以獲得視窗[j+1, i+1] 中的母音數量。

// 更新下最大值

anw =

max(anw, cnt);}

return anw;}}

;如果集合中所有元素的某種排列是回文串,那麼集合中最多有一種元素出現了奇數次

那麼題目就變成了統計所有根節點到葉子結點的路徑中,符合上述特點的路徑數量。

可以使用dfs完成上述統計,在dfs過程中使用乙個計數器統計根節點到當前棧頂結點的路徑中每個元素的出現次數:

/**

* definition for a binary tree node.

* struct treenode

* treenode(int x) : val(x), left(nullptr), right(nullptr) {}

* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}

* };

*/class

solution}if

(odd <=1)

return0;

}int

dfs(treenode *root,

int*cnt)

cnt[root-

>val]++;

if(root-

>left ==

nullptr

&& root-

>right ==

nullptr

)int anw =0;

if(root-

>left !=

nullptr)if

(root-

>right !=

nullptr

) cnt[root-

>val]--;

return anw;

}int pseudopalindromicpaths (treenode* root)

;return

dfs(root, cnt);}

};

動態規劃題目一般要先想好兩個問題:

對於該題,最終目標是在分別兩個序列中選取等長且非空的子串行,使得兩個子串行的點積最大。

即,在 nums1 的前 n 個數中,在 nums2 的前 m 個數字中分別選取等長且非空的子串行, 使其點積最大。

推而廣之,我們可以將問題表示為,在nums1的前 x (x <= n)個數字中,在nums2的前y(y <= m)個數字中,分別選取等長且非空的子串行, 使其點積最大。

為了方便,我們用f(x, y)表示子問題的最優方案的點積。

當(x, y) = (n,m) 時,f(x,y) 就是最終答案。

狀態轉移主要是分析狀態之間的關聯或差異,利用小問題的解高效的構造大問題的解。

來思考下該題狀態如何轉移,該題的特點是小問題總是為大問題的字首,總是可以向小問題中追加數字得到乙個大問題。

設 nx = nums1[x],ny = nums2[y]。

f(x,y) 可能由以下幾個狀態轉移得到:

當然,也可以同時追加多個數字,由更小的問題獲得 f(x, y),但這本質上還是通過上述三種子問題間接轉移過來的。

那麼,為何f(x-1,y-1) 不能用 f(x-1, y) 或者 f(x, y-1) 間接轉移過來呢?因為在求解過程中要考慮nx 和 ny 在對應位置的情況。

總結一下,該題的狀態方程如下:

f (x

,y)=

maxnx*ny&, 有且只有 nx,ny\\ nx*ny + f(x-1, y-1)&, 包含 nx,ny \\ f(x, y-1)&, 不包含 nx \\ f(x-1, y)&, 不包含 ny \\ f(x-1, y-1)&, 不包含 nx,ny\\ \end\right.

f(x,y)

=max

⎩⎪⎪⎪

⎪⎨⎪⎪

⎪⎪⎧​

nx∗n

ynx∗

ny+f

(x−1

,y−1

)f(x

,y−1

)f(x

−1,y

)f(x

−1,y

−1)​

,有且只

有nx,

ny,包

含nx,

ny,不

包含nx

,不包含

ny,不

包含nx

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...