8.1-8.2 - medium總結 - 總結3

總結181到240這六十題medium難度的。這一段做的很不好,好多題都不太會。這里要好好總結一下,一天搞不定分兩天,不過一定要每一題都能過。數(shù)了一下,六十題有二十九道題不會做,我也是醉了。剩下還有六十題這樣子,要踏實得慢慢過,不要著急。每一道題都有它出彩的地方,這些點要理解清楚,之后再去做難題會好很多。

361. Bomb Enemy: 這題最主要的思想就是,先提前用循環(huán)更新當前的row enemy和col enemy。但是并不是對每一個值都更新,只有初始化的時候,還有就是碰到墻壁要重置的時候才去更新值,其它的時候就直接用前面更新過的值。
365. Water and Jug Problem: 主要就是要證明一個,如果x,y是coprime的話,那么可以獲得[0, x+y]中的任何值。如果不是coprime,那么就是可以獲得 gcd(x, y)*[0, x+y]中的任何值。證明過程https://leetcode.com/problems/water-and-jug-problem/discuss/ 。而要計算coprime x y的話,就是用遞歸 gcd(a, 0) = a, gcd(a,b) = gcd(b, a%b)
372. Super Pow: 這道題踩的人很多,基本的想法就是(a*b)%c = a%c*b%c所以a^[1,2,3]%c = a^[1,2]^10%c*a^3%c 而對于a^x%c = for i in range(c): res= (res*a)%c
375. Guess Number Higher or Lower II: minmax,每一個子情況都考慮最壞的,不過對于所有的子情況中,獲取一個最好的。還有這題又是一道對角線dp,對于對角線dp進行循環(huán)的時候,可以去循環(huán)一個distance表示i,j之間的距離,然后再循環(huán)i,計算出j = i+distance,這樣可以保證從先計算出靠近對角線的值再計算遠離對角線的值。
382. Linked List Random Node: 蓄水池采樣法
384. Shuffle an Array: 這題應該會做的。只是簡單的利用random.randint,然后不停的從數(shù)組中移除元素。
385. Mini Parser:利用stack,但是最關鍵的問題是每碰到一個【就創(chuàng)建一個object 加入到stack里,每碰到一個】就把當前的object加入到stack[-1]里。然后再分別考慮“,”和number的情況。
386. Lexicographical Numbers:這道題很難想。記錄一下邏輯思路,希望下一次能直接寫出來:先對當前res里的最后一個元素乘以10賦值為cur,如果cur大于n說明,乘以10超過了n的范疇,然后就把cur再除以10,并且加1,比如說最后一個值是2,那么先變化為20,如果20太大了,就變回2并且加1,變到3.如果是100就先變到1000,然后如果1000太大了,就變回100,并且加1把101放入到res里去。不過此時要處理一種情況,比如說當前是199,先放大十倍,如果1990不在范圍然后變回199并且加1,就是200,這時候要檢測200%10是否是0,如果是的話,就變回到20,再檢測20%10,還是為0,就繼續(xù)變回到2。然后再繼續(xù)。
388. Longest Absolute File Path:首先要想到要按\n split整個input,然后要記錄個元素的level,這個level可以有前綴\t 的個數(shù)來確定。然后每次訪問要從當前l(fā)evel - 1,也就是父文件夾開始。
390. Elimination Game: 這題解法也挺奇特,要記錄變量是head的位置,當前步長還有剩余數(shù)的個數(shù)
393. UTF-8 Validation:python的二進制表示法:0b11110000. 知道這個之后,記錄一個當前的i,然后一個一個loop就可以了
395. Longest Substring with At Least K Repeating Characters: 這題是用recursion的思想來做,不停的分成substring,然后再計算substring的可能性。
396. Rotate Function:利用相鄰的差的公式,循環(huán)計算就可以了。
397. Integer Replacement: 主要要觀察到一個性質,n%4==3的時候要+1,==1的時候要-1。
399. Evaluate Division:這題是創(chuàng)建一個帶權重的圖,然后在圖里面找最短路徑。
413. Arithmetic Slices: 利用前向型指針,先計算出所有等距線段的長度,然后再通過一次數(shù)學計算就可以了。
416. Partition Equal Subset Sum: 比較非典型的一個背包問題,其實能想到這是一道背包問題基本上這題就算是做出來了。
418. Sentence Screen Fitting: 這道題大概的解法是知道了,不過為什么還不是很清楚
421. Maximum XOR of Two Numbers in an Array: 首先要記得一個性質 a^b=c => a^c=b,然后記錄當前的prefix和下一個可能的next_prefix = prefix << 1 | 1如果next_prefix = a^b的話,就更新。
423. Reconstruct Original Digits from English: 還算是有意思的一種解題思路,直接靠眼觀察的
439. Ternary Expression Parser: 還算比較容易的一道題,應該是當時已經(jīng)做昏頭了,所以才沒做出來吧。在用stack存儲的時候,可以用一個op來記錄當前的operator。
444. Sequence Reconstruction: 一道topologysort的問題,雖然拓撲排序比較簡單,但是要把題目識別出來時拓撲排序還是需要一定的功力的。
450. Delete Node in a BST: 利用遞歸的思想,比較當前的root和key的大小直到找到root.val==key,然后再對這個root進行替換
456. 132 Pattern:用stack維護一個遞減區(qū)間,這種題目說難很難,知道解法后代碼量不多,感覺還好。
464. Can I Win: 這道題想起來也不是很難。不過這種play game的題目一向是我的弱項。
467. Unique Substrings in Wraparound String: 關鍵的一個觀察點在于以某個一char結尾的所有substring等于以這個char結尾的最長substring的長度。比如說zabcd,如果找所有以c結尾的substring 就等于 4 == len(zabc) == len([zabc, abc, bc, c])
469. Convex Polygon: 這題是真心不會做。。。只能強行背答案。。?;镜南敕ㄊ莄rossproduct可以求出兩個vector的方向(順時針還是逆時針),然后所有的這樣的點和邊都要保持這樣的方向就可以了。
473. Matchsticks to Square: 又是一種backtracking的新思路。把pos走到底看看有沒有形成最終答案。
474. Ones and Zeroes: 這題是特別典型的背包dp,要多練習啊。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容