矩陣(一般是二維陣列)操作的題目在面試中考察基礎coding的時候比較常見,一般來說不帶有太多演算法思想,純粹就是二維陣列下標的操作。雖然比較簡單,不過還是比較能體現基本的實現能力。leetcode中關於矩陣操作的題目有以下幾個:
spiral matrix
spiral matrix ii
rotate image
valid sudoku
set matrix zeroes
前面三個題spiral matrix,spiral matrix ii,rotate image思路比較類似,都是按照一定的規則在二維陣列裡面走下標。
spiral matrix就是按照螺旋的方式,按照右下左上的順序,走到頭就換方向。小技巧就是把這些螺旋分成層,然後知道區間照著走就可以。spiral matrix ii也是一樣的,不過是換成1到n^2的整數。
而rotate image也是比較類似的,主要是想清楚每乙個點經過旋轉之後的下表位置,然後還是分成層,一層層進行旋轉即可。
valid sudoku是讓我們判斷乙個sudoku的盤是否合法,對於行和列的判斷應該比較簡單,就是1到9不重複出現即可,有點技巧的是對於每個九宮格的合法性判斷,這裡需要稍微斟酌一下才可以把**寫得比較通用簡潔一些,大家可以看看valid sudoku中的實現哈。
最後我們來說說比較有技巧的set matrix zeroes這道題。它是乙個非常常見的題目了,也是cc150中的題目。看似乙個非常簡單的題目,就是如果矩陣如果有元素為0,就把對應的行和列上面的元素都置為0,但是卻有層層的優化方法。時間複雜度基本都是o(m*n),而空間複雜度卻有很多可以優化的空間。最簡單的思路是備份乙個矩陣,然後照著原矩陣進行判斷,有0則置對應列和行為0,這樣空間是o(m*n)。而如果我們維護乙個行和列的布林陣列,然後掃瞄一遍矩陣記錄那一行或者列是不是應該置0,最後在進行一次賦值,這樣時間複雜度不變,而空間複雜度只需要o(m+n)。再進一步優化,如果我們連布林陣列都不要,而用第一行和第一列來代替布林陣列,然後用兩個變數來維護第一行和第一列的置0情況,這樣就只需要o(1)的額外空間了。模型非常簡單的乙個題目,卻有非常不同的答案,還是比較值得一考的題目哈。
這篇總結主要介紹了leetcode中幾個關於矩陣操作的題目,這種題目主要考點就是二維陣列的下標操作,寫**的時候要思路清晰,才能保證bug free地實現。而有時候也會有像set matrix zeroes這樣模型比較簡單,但是還是有一些考點的題目,大家還是要盡量考慮到最優解法。
LeetCode總結 位運算篇
位運算一直程式設計和面試中的乙個必須準備的主題。不過現在面試中關於位運算的出現得不多,主要原因還是位運算太考察技巧了,很多時候很難在短時間內想出來,所以作為面試的題目顯得有點太花時間了。leetcode中關於位運算的題目有以下幾道 single number single number ii div...
LeetCode總結 高精度篇
分享一下我老師大神的人工智慧教程。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!我們常見的一些基本的資料結構比如整型int或者浮點型float由於位數過多無法用內建型別儲存,這時候我們就需要自己實現高精度的資料型別來進行儲存和運算。這種問題在實際產品中還是比較實用的,...
LeetCode總結 樹的性質篇
樹的性質判斷是樹的資料結構比較基本的操作,一般考到都屬於非常簡單的題目,也就是第一道入門題,面試中最好不能有問題,力求一遍寫對,不要給面試官任何挑刺機會。leetcode中關於樹的性質有以下題目 maximum depth of binary tree minimum depth of binary...