復(fù)盤(pán)|第286場(chǎng)周賽
找出兩數(shù)組的不同
【哈希】存兩個(gè)哈希集合,遍歷st1判斷是否位于st2,遍歷st2判斷是否位于st1.
美化數(shù)組的最少刪除數(shù)
【棧模擬】從前往后遍歷 + 需要考慮相鄰元素 + 有消除操作 = 棧。棧模擬,棧大小為偶數(shù),遍歷整個(gè)數(shù)組,則可以隨意加入棧,棧大小為奇數(shù),則加入的元素不能和棧頂相同。遍歷結(jié)束后,若棧大小為奇數(shù)則移除棧頂。代碼中可以不需要實(shí)際用棧,采用棧的思想,用一個(gè)變量表示棧的奇偶性。
【一次遍歷】保證i每次落到刪除之后的偶數(shù)位置。(else i++和for循環(huán)的i++剛好跳兩格)
找到指定長(zhǎng)度的回文數(shù)
【數(shù)學(xué)】回文數(shù)的左半部分是從100開(kāi)始增加的,找規(guī)律可發(fā)現(xiàn)第q個(gè)回文數(shù)的左半部分為10^?(intLength - 1) / 2? + q - 1。反轉(zhuǎn)這個(gè)數(shù),拼到左半部分之后即為第q個(gè)長(zhǎng)為intLength的回文數(shù),如果intLength為奇數(shù)則先去掉最低位再反轉(zhuǎn)。
從棧中取出 K 個(gè)硬幣的最大面值和
【DP】題意是對(duì)每個(gè)站.轉(zhuǎn)化為分組背包模型,從n個(gè)物品組里取物品體積和為k的物品,且每組至多取一個(gè)物品時(shí)的物品價(jià)值最大和。定義dp[i] [j]為從前i個(gè)組取體積之和為j的物品時(shí),物品價(jià)值之和的最大值。枚舉第i個(gè)組所有物品,設(shè)當(dāng)前物品體積為v,價(jià)值為w,則有dp[i] [j] = max(dp[i] [j], dp[i - 1] [j - w] + v),ans = dp[n] [k]。也可以仿造01背包將第一維壓縮掉.