LeetCode 第201場周賽題解報告

2021-10-08 23:41:23 字數 1779 閱讀 8200

知識點:棧如果棧滿足上述兩個條件,則彈出棧頂的兩個元素。

最後棧內的字元即為答案~

class

solution

}return stack;}}

;

知識點:預處理因為只會對前 20 個 s 進行詢問,所以可以先預處理出s1,s2,s2 … s20。這樣對於每次詢問就可以o(1)的給出答案了~

// 全區變數,用於儲存 s1,s2, ..., s20

std::vector seq;

class

solution

return anw;

} string invert

(string s)

else

}return s;

}solution()

// 按題目描述初始化 seq

seq.

push_back

("0");

for(

int i =

1; i <

20; i++)}

;char

findkthbit

(int n,

int k)

};

知識點:動態規劃設 dp[i] 表示前 i 個數字中,滿足要求的子陣列個數。

當 i = 0 時,顯然有 dp[0] = 0。

當 i > 0 時,有兩種情況:

如果不存在這樣的 j,那麼 dp[i] 只能是 dp[i-1],因為第 i 個陣列沒有做出任何貢獻。

還有一種情況,如果存在多個滿足條件的 j 呢?顯然要選最大的,因為 dp 是單調非降的,j 越大,則 dp[j] 也可能越大,則 dp[j-1] + 1 更有可能大於 dp[i-1]。

class

solution

else

// 更新一下 pos_dict。因為 value 是最大的位置。

pos_dict[sum]

= i;

}return dp[nums.

size()

];}}

;

知識點:動態規劃設 dp[l][r] 為切割以l,r為左右端點的木棍的最小成本。顯然 l,r 的取值只能是0,n,或者 cuts中的某個數

如果不存在 i 滿足 l < cuts[i] < r,那麼dp[l][r] = 0,因為根本不用切了。

如果存在 i 滿足上述條件,則 dp[l][r] = min(dp[l][cuts[i]] + dp[cuts[i]][r]) + r-l。

class

solution

// l+1 == r 時,說明不用再切了。

if(l+

1== r)

// 列舉切割的地方,記錄最優解。

LeetCode 第 201 場周賽

手速慢,掛兩發。給你乙個由大小寫英文本母組成的字串s。乙個整理好的字串中,兩個相鄰字元s i 和s i 1 不會同時滿足下述條件 請你將字串整理好,每次你都可以從字串中選出滿足上述條件的兩個相鄰字元並刪除,直到字串整理好為止。請返回整理好的字串。題目保證在給出的約束條件下,測試樣例對應的答案是唯一的...

第 201 場力扣周賽題解

極限過題,最後30s才debug出來,真滴菜。5483.整理字串 思路 按照題目要求來即可,乙個小坑點是刪除了兩個字元後原本不相鄰的字元變得相鄰,因此需要注意一下。class solution while st.isempty return str.reverse tostring 5484.找出第...

leetcode 第132場周賽

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