【算法筆記】學(xué)代碼执赡,從最簡單的開始

學(xué)代碼甚亭,從最簡單的開始

相關(guān)資料
《數(shù)據(jù)結(jié)構(gòu)與算法之美》
《劍指Offer》

代碼規(guī)范

1. 代碼命名規(guī)范

類型 示例
類名 ThisIsClass
變量名 thisIsValue
函數(shù)名 thisIsValue
常量名 THIS_IS_CONSTANT


2. 代碼書寫規(guī)范

1. 合并判斷條件膊夹,減少 if 語句

if (sortType == SortType.descend)

優(yōu)化為

if (num > data[i] && sortType == SortType.descend)


總結(jié)思路

1. 謹(jǐn)慎處理邊界問題(空數(shù)組等)

2. 從變化中設(shè)計不變的量

  • 題目 283 移動零:后移 0 → 前移非 0
  • 題目 566 重塑矩陣:index 表示重構(gòu)矩陣前后的第 index 個元素

3. 類比經(jīng)典算法

  • 題目 03 數(shù)組中重復(fù)的數(shù)字:n 個元素层释,取值范圍為 0~n-1 → 類 Hash 尋找元素沖突
  • 題目 04 二維數(shù)組中的查找:行和列均遞增 → 類二分法縮小查找范圍


數(shù)據(jù)結(jié)構(gòu)與算法之美

1. 數(shù)組

題目 1:大小固定的有序數(shù)組截驮,支持動態(tài)增刪改

  • 錯誤 1:插入函數(shù)搜索插入位置時 index 初值為 -1笑陈,未考慮空數(shù)組的情況,導(dǎo)致數(shù)組越界
// 考慮空數(shù)組葵袭,因此 index 設(shè)為 0
if (count == 0) {
    index = 0;
}
  • 錯誤 2:降序數(shù)組只有元素 7 時新锈,插入 4 的index值為 0,反而插入到了 7 前面眶熬,未考慮數(shù)組元素比較結(jié)束妹笆,插入數(shù)組末尾的情況
// 考慮插入數(shù)組末尾的情況
if (i == count) {
    index = count;
}

查找成功后沒有 break 循環(huán),導(dǎo)致此判斷條件失效

  • 總結(jié)未考慮插入首位和末位的特殊情況(即邊界)**


題目 2:支持動態(tài)擴(kuò)容的無序數(shù)組娜氏,按索引增刪改查

  1. 無參構(gòu)造函數(shù)調(diào)用有參構(gòu)造函數(shù)
  2. 數(shù)組已滿則擴(kuò)容拳缠,不足1/4則縮容為1/2,擴(kuò)容和縮容調(diào)用同一函數(shù)


題目 3:兩個有序數(shù)組合并為一個有序數(shù)組

  • 錯誤:數(shù)組中有 count 個元素贸弥,但最后一個元素的位置是 count-1


劍指Offer

題目 03:數(shù)組中重復(fù)的數(shù)字

在一個長度為 n 的數(shù)組 nums 里的所有數(shù)字都在 0~n-1 的范圍內(nèi)

  • 思路1(×):HashSet的add方法窟坐,元素重復(fù)則返回false

  • 思路2(√):將值為 i 的元素調(diào)整到第 i 個位置上進(jìn)行求解(類Hash

時間復(fù)雜度 O(n),空間復(fù)雜度 O(1)

  • 注意事項
  1. 某處缺少返回值
  2. 先初始化類绵疲,才能在main函數(shù)中調(diào)用


題目 04:二維數(shù)組中的查找

行和列均遞增

a[i][1] a[i][2] a[i][3] a[i][4]
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
  • 思路:選取數(shù)組中右上角的數(shù)字哲鸳,縮小查找區(qū)間(類似二分法取中值

時間復(fù)雜度 O(M + N),空間復(fù)雜度 O(1)

  1. if 該數(shù)字=要查找的數(shù)字盔憨,查找過程結(jié)束
  2. else if 該數(shù)字>要查找的數(shù)字徙菠,剔除這個數(shù)字所在的列
  3. else if 該數(shù)字<要查找的數(shù)字,剔除這個數(shù)字所在的行
  • 注意事項
  1. 空數(shù)組求長度越界
  2. 判斷空數(shù)組的條件寫在一起
if (matrix == null || matrix.length == 0 || matrix[0].length == 0)


LeetCode

1. 數(shù)組與矩陣

題目 283:移動零

將數(shù)組 nums 中的 0 移動至數(shù)組末尾

  • 思路:遍歷數(shù)組郁岩,跳過 0 元素婿奔,即前移非 0 元素,最后根據(jù) index 位置在末尾補(bǔ) 0(移動 0 至末尾 → 移動非 0 至前面

時間復(fù)雜度 O(n)问慎,空間復(fù)雜度 O(1)


題目 566:重塑矩陣

將 m×n 的矩陣 nums 重構(gòu)為 r×c 的矩陣 reshapedNums

  • 思路:重構(gòu)過程中行遍歷的元素位置不變萍摊,將 index 設(shè)為原數(shù)組 nums 行遍歷的第 index 個元素(index < m×n),則重構(gòu)后其依然為第 index 個元素
  1. 2×2 → 1×4:reshapedNums[i][j] = nums[index / 2][index % 2]
  2. 1×6 → 2×3:reshapedNums[i][j] = nums[index / 6][index % 1]
  3. m×n → r×c:reshapedNums[i][j] = nums[index / n][index % n]

時間復(fù)雜度 O(r * c)如叼,空間復(fù)雜度 O(r * c)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冰木,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌踊沸,老刑警劉巖囚衔,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異雕沿,居然都是意外死亡练湿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門审轮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肥哎,“玉大人,你說我怎么就攤上這事疾渣〈鄯蹋” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵榴捡,是天一觀的道長杈女。 經(jīng)常有香客問我,道長吊圾,這世上最難降的妖魔是什么达椰? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮项乒,結(jié)果婚禮上啰劲,老公的妹妹穿的比我還像新娘。我一直安慰自己檀何,他們只是感情好蝇裤,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著频鉴,像睡著了一般栓辜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上垛孔,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天藕甩,我揣著相機(jī)與錄音,去河邊找鬼似炎。 笑死辛萍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的羡藐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼悯许,長吁一口氣:“原來是場噩夢啊……” “哼仆嗦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起先壕,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤瘩扼,失蹤者是張志新(化名)和其女友劉穎谆甜,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體集绰,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡规辱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了栽燕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罕袋。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖碍岔,靈堂內(nèi)的尸體忽然破棺而出浴讯,到底是詐尸還是另有隱情,我是刑警寧澤蔼啦,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布榆纽,位于F島的核電站,受9級特大地震影響捏肢,放射性物質(zhì)發(fā)生泄漏奈籽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一鸵赫、第九天 我趴在偏房一處隱蔽的房頂上張望唠摹。 院中可真熱鬧,春花似錦奉瘤、人聲如沸勾拉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽藕赞。三九已至,卻和暖如春卖局,著一層夾襖步出監(jiān)牢的瞬間斧蜕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工砚偶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留批销,地道東北人。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓染坯,卻偏偏與公主長得像均芽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子单鹿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359