第241題到309題叶堆,終于終于把所有的中等難度都算是二刷了阱飘。今天再總結(jié)一下,明天可以進(jìn)入難題了虱颗。
486. Predict the Winner:用backtracking做了一遍沥匈,果然隔代考慮容易一些,我本來用play1忘渔,player2這樣子來考慮高帖,一會(huì)就繞暈頭了,用dp再做一遍畦粮,這個(gè)遞推公式是關(guān)鍵:dp[i][j] = max(dp[i][j], sum(nums[i:j+1]) - dp[i][j-1], sum(nums[i:j+1]) - dp[i+1][j])
494. Target Sum:如果用簡(jiǎn)單的backtracking就會(huì)TLE散址, 用記憶化搜索可以AC。這道題可以非常巧妙的轉(zhuǎn)化為背包問題宣赔,比如對(duì)于a,b,c, sum = +a+b+c, 假設(shè)target = -a-b+c爪飘, 那么sum+target = 2c,也就是要找到一些元素拉背,能夠正好放入(sum+target)/2的背包里师崎,問有多少種放法,不過這道題很tricky椅棺,我還不太適應(yīng)一維背包犁罩,所有利用二維背包來做齐蔽,用二維背包的時(shí)候因?yàn)檫@里面有0,所以在初始化的時(shí)候很要注意0的問題床估。
505. The Maze II: 這道題就是要求圖上兩點(diǎn)間的最短路徑含滴,但是求的時(shí)候不是那么直接,要記錄當(dāng)前點(diǎn)的最短路徑丐巫,用heap來存所有可以訪問的點(diǎn)谈况,用hash來存起點(diǎn)道此訪問點(diǎn)的距離
523. Continuous Subarray Sum: 對(duì)于mod負(fù)數(shù)還是不太熟悉
525. Contiguous Array:也是利用前綴和+hash,不過有點(diǎn)做累了递胧。所以這題思路沒想太清晰就去看答案了碑韵,應(yīng)該能夠完整寫出來的。
553. Optimal Division:這題雖然有數(shù)學(xué)解法缎脾,不過最好還是用backtracking做一遍祝闻,用backtracking的時(shí)候要同時(shí)記錄最大值和最小值
555. Split Concatenated Strings:umm,這題的描述讓人很不想做遗菠。
562. Longest Line of Consecutive One in Matrix: 利用多維dp联喘,code會(huì)清爽很多
609. Find Duplicate File in System: 這題題目本身不難,follow up涉及處理海量數(shù)據(jù)的問題辙纬,要多看看
621. Task Scheduler: 一道greedy的題目豁遭,利用heap的排序性質(zhì),先把最大的頻率的值先訪問贺拣,然后依次填滿兩個(gè)最大頻率之間的空
625. Minimum Factorization: 用greedy的想法還是比較容易做出來的
634. Find the Derangement of An Array: 其實(shí)算一道數(shù)學(xué)題堤框,主要要記住這個(gè)遞推公式:dp[i] = (i-1)*(dp[i-2]+dp[i-1])
636. Exclusive Time of Functions: 用stack來做,一個(gè)一個(gè)朝里面加纵柿,然后用stack[-1]的值來累積哪一項(xiàng)任務(wù)的時(shí)長(zhǎng)蜈抓。
638. Shopping Offers: 這道題就是一道dfs,不要被它的樣子所迷惑了昂儒,dp很難解的
649. Dota2 Senate: 用一個(gè)deque沟使,pop出來一個(gè)元素后,考慮要不要加回去渊跋。
652. Find Duplicate Subtrees:當(dāng)時(shí)做的時(shí)候有點(diǎn)懵腊嗡。。拾酝。不過其實(shí)也就是把每一個(gè)node表示成一個(gè)preorder的string燕少,然后比較一下就好了,沒遇到過這種題目蒿囤,第一次的話客们,還是有點(diǎn)思路沒繞開