復(fù)盤|2022.6每日一題
6.1題目 473. 火柴拼正方形
【回溯】計算所有火柴的總長度totalLen,如果totalLen不是4的倍數(shù),return false。當(dāng)totalLen是4的倍數(shù)時,每條邊的邊長為len=totalLen / 4.
6.2題目 450. 刪除二叉搜索樹中的節(jié)點
【遞歸】二叉搜索樹的性質(zhì)。
6.3題目 829. 連續(xù)整數(shù)求和
【數(shù)學(xué)】如果k是奇數(shù),則當(dāng)n可以被k整除時,正整數(shù)n可以表示成k個連續(xù)正整數(shù)之和;如果k是偶數(shù),則當(dāng)n不可以被k整除且2n可以被k整除時,正整數(shù)n可以表示成k個連續(xù)正整數(shù)之和。
6.4題目 929. 獨特的電子郵件地址
【哈希表】模擬,去掉本地名中第一個加號之后的部分(包括加號),去掉本地名中所有的句點。
6.5題目 478. 在圓內(nèi)隨機生成點
【數(shù)學(xué)】計算分布函數(shù),「概率密度函數(shù) PDF」以及「累積分布函數(shù) CDF」。
6.6題目 732. 我的日程安排表 III
【差分數(shù)組】TreeMap計數(shù)。
6.7題目 875. 愛吃香蕉的珂珂
【二分】實現(xiàn)方面,在計算吃掉每一堆香蕉的時間時,由于pile和speed都大于0,因此?pile/speed? 等價于 ?plie + speed - 1 / speed?
6.8題目 1037. 有效的回旋鏢
【直線斜率】類似向量叉乘。
6.9題目 497. 非重疊矩形中的隨機點
【前綴和 + 二分】前綴和可以記錄某個矩形覆蓋的整數(shù)點的編號范圍。因為不同矩形覆蓋的整數(shù)點編號是單調(diào)的,利用二分搜索根據(jù)整數(shù)點編號快速確定矩形編號。確定矩形編號后,原整數(shù)點編號可以轉(zhuǎn)換為矩形內(nèi)整數(shù)點編號,然后定位具體的點的坐標。
6.10題目 730. 統(tǒng)計不同回文子序列
【DP】dp(x,i,j)=2+Σdp(x_k,i+1,j-1);dp(x,i,j)=dp(x,i,j-1);dp(x,i,j))=dp(x,i+1,j);dp(x,i,j)=dp(x,i+1,j-1)四種情況。
6.11題目 926. 將字符串翻轉(zhuǎn)到單調(diào)遞增
【DP】dp[i[0]=dp[i-1] [0]+I(s[i='1'); dp[i] [1] =min(dp[i-1] [0], dp[i-1] [1])+I(s[i]='0')。
6.12題目 890. 查找和替換模式
【構(gòu)造雙射】根據(jù)題意,需要構(gòu)造從字母到字母的雙射,即word的每個字母需要映射到pattern的對應(yīng)字母,并且pattern的每個字母也需要映射到word的對應(yīng)字母??梢跃帉懸粋€函數(shù)match(word,pattern)。
6.13題目 1051. 高度檢查器
【排序】按題意模擬。
6.14題目 498. 對角線遍歷
【模擬】按題意模擬,i分奇偶,i分≥m和<m,i分<n和≥n。
6.15題目 719. 找出第 K 小的數(shù)對距離
【排序 + 二分查找 + 雙指針】從小到大枚舉所有數(shù)對的右端點了,移動左端點直到nums[j]-nums[d]≤mid,那么右端點為j且距離小于等于mid的數(shù)對數(shù)目為j-i,計算這些數(shù)目之和。
6.16題目 532. 數(shù)組中的 k-diff 數(shù)對
【哈希表】遍歷數(shù)組,找出符合條件的數(shù)對。因為是尋找不同的數(shù)對,所以可以將數(shù)對放入哈希表res,完成去重的效果,最后返回哈希表的長度即可。
6.17題目 1089. 復(fù)寫零
【雙指針】用兩個指針來進行標記棧頂位置和現(xiàn)在需要放置的元素位置即可。我們用0p來標記棧頂位置,用i來標記現(xiàn)在需要放置的元素位置,那么我們找到原數(shù)組中對應(yīng)放置在最后位置的元素位置,然后在數(shù)組最后從該位置元素往前來進行模擬放置即可。
6.18題目 劍指 Offer II 029. 排序的循環(huán)鏈表
【一次遍歷】如果循環(huán)鏈表為空,則插入一個新節(jié)點并將新節(jié)點的nct指針指向自身,插入新節(jié)點之后得到只有一個節(jié)點的循環(huán)鏈表,該循環(huán)鏈表一定是有序的,將插入的新節(jié)點作為新的頭節(jié)點返回。
6.19題目 508. 出現(xiàn)次數(shù)最多的子樹元素和
【DFS】從根結(jié)點出發(fā),深度優(yōu)先搜索這棵二叉樹。對于每棵子樹,其子樹元素和等于子樹根結(jié)點的元素值,加上左子樹的元素和,以及右子樹的元素和。用哈希表統(tǒng)計每棵子樹的元素和的出現(xiàn)次數(shù),計算出現(xiàn)次數(shù)的最大值maxCnt,最后將出現(xiàn)次數(shù)等于maxCnt的所有元素和返回。
6.20題目 715. Range 模塊
【有序集合 / 有序映射】使用有序集合或者有序映射來實時維護所有的區(qū)間。在任意一次addRange或removeRange操作后,我們需要保證有序集合中的區(qū)間兩兩不能合并成一個更大的連續(xù)區(qū)間。
6.21題目 1108. IP 地址無效化
【遍歷】按題意模擬。
6.22題目 513. 找樹左下角的值
【BFS】遍歷,先放右子節(jié)點,再放左子節(jié)點。
6.23題目 30. 串聯(lián)所有單詞的子串
【滑動窗口】劃分成單詞組后,一個窗口包含s中前m個單詞,用一個哈希表differ表示窗口中單詞頻次和words中單詞頻次之差。初始化differ時,出現(xiàn)在窗口中的單詞,每出現(xiàn)一次,相應(yīng)的值增加1,出現(xiàn)在words中的單詞,每出現(xiàn)一次,相應(yīng)的值減少1。然后將窗口右移,右側(cè)會加入一個單詞,左側(cè)會移出一個單詞,并對differ做相應(yīng)的更新。窗口移動時,若出現(xiàn)differ中值不為0的鍵的數(shù)量為0,則表示這個窗口中的單詞頻次和wods中單詞頻次相同,窗口的左端點是一個待求的起始位置。
6.24題目 515. 在每個樹行中找最大值
【BFS】我的層序遍歷模板。
6.25題目 劍指 Offer II 091. 粉刷房子
【DP】dp[i] [j] = m =in(dp[i-1] [(j+1) mod 3,dp[i-1] [(j+2)mod 3)+costs[i] [j].
6.26題目 710. 黑名單中的隨機數(shù)
【哈希映射】值域范圍內(nèi)的個數(shù)為n,不可選的數(shù)有m個,所以可選的數(shù)一共n-m個。
我們隨機一個n~m內(nèi)的數(shù),總能找到唯一一個它對應(yīng)的可選數(shù)。
6.27題目 522. 最長特殊序列 II
【枚舉每個字符串】對于給定的某個字符串str,如果它的一個子序列sub是「特殊序列」,那么str本身也是一個「特殊序列)。
6.28題目 324. 擺動排序 II
【排序】n為偶數(shù)時,nums[x],nums0],nums[+1],nums[1]….按這個順序插入再反轉(zhuǎn)。n為奇數(shù),nums[0],nums[x],nums[1],.,nums[n-1-x]….,再反轉(zhuǎn)。
6.29題目 535. TinyURL 的加密與解密
【哈希表】按題意模擬。
6.30題目 1175. 質(zhì)數(shù)排列
【質(zhì)數(shù)判斷 + 組合數(shù)學(xué)】總的方案數(shù)即為所有質(zhì)數(shù)都放在質(zhì)數(shù)索引上的方案數(shù)×所有合數(shù)都放在合數(shù)索引上的方案數(shù),求所有質(zhì)數(shù)都放在質(zhì)數(shù)索引上的方案數(shù),即求質(zhì)數(shù)個數(shù)numPrimes的階乘。