知識點:棧如果棧滿足上述兩個條件,則彈出棧頂的兩個元素。
最後棧內的字元即為答案~
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解釋 愛...