復盤|第336場周賽
統(tǒng)計范圍內的元音字符串數
重排數組以得到最大前綴分數
【排序+貪心】從大到小排序后,一開始前綴和加到最大,后面能夠減的空間就越大,可以一邊遍歷一邊計算大于0的前綴和數量。
統(tǒng)計美麗子數組數目
【前綴和+哈希表】每次操作要把nums[i]和nums[j]同一個比特位的1改成0等同于每次修改兩個1,題中說執(zhí)行若干次修改后,子數組能變成全為0的數,顯然這個子數組每個有1的比特位上都有偶數個1,執(zhí)行偶數次的1 ⊕ 1 = 0后,該比特位才能全零。把所有比特位合起來看,美麗子數組這等價于子數組的異或和等于 0(子數組每個數的每個比特位異或0等價于子數組異或為0)。問題轉換為求異或和為0的子數組的個數。子數組的異或和等于兩個前綴異或和的異或,異或為0說明兩個前綴和是相等的,即求前綴異或和數組中所有相同的數對。
完成所有任務的最少時間
【排序+貪心】為了盡可能讓多個任務同時運行,應該盡量延遲任務的執(zhí)行,所以按照右端點排序,對于task[i]來說,它右側的任務要么和它沒交集,要么包含它的區(qū)間后綴。遍歷排序后的任務,先統(tǒng)計區(qū)間內電腦運行時間點,如果小于duration,就盡量把運行時間安排在區(qū)間[start, end]的后綴上。