LeetCode第228場周賽

2021-10-19 10:19:16 字數 1402 閱讀 1126

考慮兩種最終情況,乙個字串,要想構造成「交替二進位制」,一種是0開頭,一種是1開頭,和下標聯絡起來,即奇數下標放奇數偶數下標放偶數和奇數下標放偶數偶數下標放奇數。

這是兩個最終狀態,遍歷字串,向兩種最終狀態進行改變,記錄改變的次數,取兩個次數的最小值即可。

class solution 

} else

}// 奇數下標放偶數,偶數下標放奇數

if ((i & 1) == 1)

} else }}

return math.min(count1, count2);}}

首先看懂同構字串的定義。假設在字串s中可以找到乙個長度為n的字元相同的字串,這裡以n個'a'字元舉例,那麼這個字串對同構子字串數目的貢獻為n個'a',n-1個'aa',n-2個'aaa',……,1個'aaa……a',它們的和是於是問題轉化成:將字串s分割成若干個小字串,每個小字串裡,只包含同乙個字元,長度盡可能長,分別計算出每個小字串對總數目的貢獻度,進行求和,注意上溢位。

class solution  else 

result += count;

i = j - 1;

break;}}

}return (int) (result % mod);}}

觀察資料量,maxoperstion最大可以取到1e9,所以不能真的操作這maxoperations次後,再檢視結果,如果這麼做了,決策正確的話,肯定會超時,因此只能將問題進行轉化。

先考慮這麼乙個問題,有乙個袋子裡有n個球,進行若干次操作,讓最多球的袋子裡球的個數不超過y,你會不會分?肯定會吧。那麼這麼分配,你最少需要幾步來完成呢?假設需要x步驟完成。若x>maxoperations,那麼就需要增大y,從而減少x;若x≤maxoperations,那麼就需要減小y,從而增大x,直到找到乙個點:最多球的袋子裡,球的個數是y,操作次數是x,滿足x≤maxoperations,倘若y變成y-1,x隨之增大,不滿足x≤maxoperations了,那麼,之前的y就是要求的答案。

此時,問題變成:在1~1e9的區間內,二分查詢乙個最小的y,使得x≤maxoperations。

class solution  else }}

if (operation <= maxoperations) else

}return result;}}

看了題解,就傻眼了,竟然是直接暴力,資料規模不大,400個頂點,時間複雜度

class solution 

for (int i = 1; i <= n; i++) }}

}return min == integer.max_value ? -1 : min;}}

Leetcode 第 228 場周賽 賽後總結

這裡t1 根據題意,符合題目要求的只有兩種字串 0101010 或1010101 因此,我們可以直接構造這兩種字串並比較與原串的差異即可。附上 對於t2,我們可以考慮用數學方法處理。即統計每乙個連續的相同的子串長度,並用求和公式求出值。由於t3資料較為龐大,我們考慮用二分法進行求解。如下 本題實際上...

第 228 場周賽記錄(490 2483

這題其實還是慢了,應該1分鐘能搞定,因為資料量很小,所以可以直接考慮2個for迴圈驗證0101 和1010這2種情況的數量,都不用再去做什麼推斷之類的。這題也很簡單,其實只要知道乙個 aaaa裡包含多少個同構字串即可 當時竟然算錯了。應該直接用土方法算1個簡單的aaaa裡包含多少個,算出來就可以 4...

leetcode 第132場周賽

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