復(fù)盤(pán)|第329場(chǎng)周賽
交替數(shù)字和
【模擬】從最低為開(kāi)始模擬,到最高位如果是負(fù)號(hào)就整體取反。
根據(jù)第 K 場(chǎng)考試的分?jǐn)?shù)排序
【排序】按題意排序。
執(zhí)行逐位運(yùn)算使字符串相等
【思維題】如果字符串中有1,那么選1和0可以把0變成1;選1和1可以把1變成0。而如果只有0,是無(wú)法得到1的。因此,只要兩個(gè)字符串中都有1或者都沒(méi)有1,就可以互相轉(zhuǎn)換。
拆分?jǐn)?shù)組的最小代價(jià)
【線段樹(shù)】記x上一次出現(xiàn)的位置是last],上上一次出現(xiàn)的位置是last2[x]。如果從左到右枚舉x=nums[i],那么區(qū)間[last[x]+1,i]內(nèi)的數(shù)的unique都加一;區(qū)間[last_2[x]+1,last[x]]內(nèi)的數(shù)的unique都減一,相當(dāng)于把之前的加一撤銷(xiāo)掉 (如果last2[x不存在則不更新)。此外,我們求的是一段區(qū)間內(nèi)的f[j]-unique_j,i:的最小值,這可以用線段樹(shù)優(yōu)化(區(qū)間更新,區(qū)間查詢)。注意unique_j,i前面是負(fù)號(hào),所以上面的區(qū)間更新值要取反。代碼實(shí)現(xiàn)時(shí),由于枚舉nums[i]時(shí),更新的是f[i+1],可以在上一輪循環(huán)時(shí)把它記錄下來(lái),在下一輪循環(huán)時(shí)去把它加到線段樹(shù)中。