復盤|第293場周賽
移除字母異位詞后的結(jié)果數(shù)組
【棧模擬】根據(jù)相鄰元素性質(zhì)刪除元素的題可以用棧來思考,從左往右遍歷,每次和棧頂比較,如果不是字母異位詞就入棧,遍歷結(jié)束后,棧中所有相鄰元素進步時字母異位詞,棧即為答案。
不含特殊樓層的最大連續(xù)樓層數(shù)
【排序 + 枚舉】可以把bottom - 1和top + 1視為兩個特殊樓層,相當于special數(shù)組有l(wèi)en(special)個分割點,問哪段最長。
本題也可參照164. 最大間距,用桶排序或基數(shù)排序,達到時空復雜度O(n)。
按位與結(jié)果大于零的最長組合
【枚舉二進制位】candidates[i] ≤ 10^7,2^23 < 10^7 < 2^24,所以每個數(shù)至多24個二進制位,對于每個二進制位而言,只要不與到0結(jié)果都大于零,所以,哪個二進制位上,這些數(shù)字里1的最多,1的數(shù)量就是答案。
統(tǒng)計區(qū)間中的整數(shù)數(shù)目
【珂朵莉樹】有序集合 / 有序映射,用一顆平衡樹維護若干個不相交的區(qū)間,每次add(left, right)時,刪除被該區(qū)間覆蓋到的區(qū)間(部分覆蓋也算),然后將這些區(qū)間與[left, right]合并到一個新的大區(qū)間,插入平衡樹中,代碼中為方便找到第一個被[left, right]覆蓋到的區(qū)間,可以用平衡樹的key存區(qū)間右端點,value存區(qū)間左端點,要找到就是第一個key≥left的區(qū)間。
【動態(tài)開點線段樹】線段樹每個節(jié)點保存對應范圍的做右端點l和r,及范圍內(nèi)add過的整數(shù)個數(shù)cnt,無需記錄lazy tag。