復(fù)盤|第110場(chǎng)雙周賽
取整購(gòu)買后的賬戶余額
【數(shù)學(xué)】題目的意思是吧purchaseAmout的各位數(shù)四舍五入,可用如下公式計(jì)算?(purchaseAmout + 5) / 10? × 10。
在鏈表中插入最大公約數(shù)
【模擬】遍歷鏈表,在當(dāng)前節(jié)點(diǎn)cur后面插入gcd節(jié)點(diǎn),gcd節(jié)點(diǎn)指向cur的下一個(gè)節(jié)點(diǎn)。插入后,cur更新位cur.next.next,循環(huán)直到cur沒有下一個(gè)節(jié)點(diǎn)為止。
使循環(huán)數(shù)組所有元素相等的最少秒數(shù)
【枚舉】最后所有元素一定是在nums中的數(shù),枚舉這個(gè)數(shù)記為x??醋魇莤擴(kuò)散到左右兩個(gè)為止,多個(gè)位置的相同的數(shù)字x同時(shí)擴(kuò)散,擴(kuò)散完整個(gè)數(shù)組的耗時(shí)取決于相距最遠(yuǎn)的兩個(gè)相鄰的x。設(shè)這兩個(gè)x的下標(biāo)分別為i和j,且i<j,耗時(shí)為?(j - i) / 2?,取所有耗時(shí)的最小值即為答案。用哈希表pos存每個(gè)數(shù)字的下標(biāo)集合,遍歷下標(biāo)i時(shí)在哈希表中添加i+n拼成非環(huán)形數(shù)組。
使數(shù)組和小于等于 x 的最少時(shí)間
【貪心 + 排序 + DP】顯然,每個(gè)下標(biāo)i至多操作一次,操作多次可以只保留最后一次(前面的操作是多余的),所以至多操作n次,嘗試枚舉答案??紤]第t秒元素之和最小是多少,如果從一開始到第t秒不做任何操作,元素之和等于sum(num1) + sum(nums2)?t,用它減去這些元素減少量之和的最大值就是第t秒元素之和的最小值。假設(shè)已經(jīng)選好了要操作的元素,那么nums2[i]越大,操作的時(shí)間應(yīng)該越靠后,根據(jù)排序不等式,在第t秒,sum(num1) + sum(nums2)?t的減少量的最大值相當(dāng)于求解:按照nums2[i]從小到大排序后,從nums1中訓(xùn)責(zé)一個(gè)長(zhǎng)為t的子序列,子序列的第j個(gè)數(shù)的nums2[j]的系數(shù)為j,計(jì)算減少量的最大值。設(shè)子序列的第j個(gè)數(shù)(j從1開始)的下標(biāo)為i,它對(duì)減少量的貢獻(xiàn)是nums1[i] + nums2[i]?j,用dp解決。定義f[i + 1] [j]表示從前i個(gè)數(shù)中選出j個(gè)數(shù),減少量最大是多少,用“選或不選的思路”,有f[i + 1] [j] = max(f[i] [j], f[i] [j - 1] + nums1[i] + nums2[i]?j)。