算法大神左程雲耗盡5年心血分享程序員代碼面試指南第2版文檔 前言 目錄 主要內容 總結

前言

對工程師而言,算法既是基礎能力,也是進階突破的必備能力。

本文內容深入淺出,不僅涉及算法知識本身,更能讓讀者解決問題的思維升級。不論是面試準備,還是日常學習,本文都可以成爲你進入算法世界的不二選擇。

相比在網上泛泛地刷題,本文更強調最優解和舉一反三的能力。對算法原型的介紹也能幫助程序員更高效地準備面試與提升自己,以及在不斷變化的題目中迅速找到思路。

也是程序員求職或跳槽刷題人的優選之作!作者用豐富的工作經驗和對算法的深刻理解,通過精闢的示例,把代碼面試題目最優解解釋得簡明和“平易近人”。

本文中,作者通過自己對常見算法知識的理解,精心選擇了一道道真實的高頻面試題,循序漸進地提升題目難度,輔以翔實的解題思路,讓讀者真正學得到內容,並學得下去。

本文將從目錄、主要內容、專家大牛對本文的評價、相比第1版有哪些改進四部分給大家介紹,希望大家能夠把裏面的內容全部掌握,並且能夠學以致用,也希望能夠得到大家的喜歡!github地址:https://github.com/Java-xiaoluo/Java-note

目錄

主要內容

本文是程序員代碼面試寶典!文中對IT名企代碼面試各類題目的最優解進行了總結,並提供了相關代碼實現。

第1章棧和隊列,設計一個有getMin功能的棧

由兩個棧組成的隊列

如何僅用遞歸函數和棧操作逆序一個棧

貓狗隊列

用一個棧實現另一個棧的排序

用棧來求解漢諾塔問題

生成窗口最大值數組

單調棧結構

求最大子矩陣的大小

最大值減去最小值小於或等於num的子數組數量

可見的山峯對數量

第2章鏈表問題,

打印兩個有序鏈表的公共部分

在單鏈表和雙鏈表中刪除倒數第K個節點

刪除鏈表的中間節點和a/b處的節點

反轉單向和雙向鏈表

反轉部分單向鏈表

環形單鏈表的約瑟夫問題

判斷一個鏈表是否爲迴文結構(普通解法 進階解法尉)

將單向鏈表按某值劃分成左邊小、中間相等、右邊大的形式

複製含有隨機指針節點的鏈表

兩個單鏈表生成相加鏈表

兩個單鏈表相交的一系列問題

將單鏈表的每K個節點之間逆序

刪除無序單鏈表中值重複出現的節點

在單鏈表中刪除指定值的節點

將搜索二叉樹轉換成雙向鏈表

單鏈表的選擇排序

一種怪異的節點刪除方式

向有序的環形單鏈表中插入新節點

合併兩個有序的單鏈表

按照左右半區的方式重新組合單鏈表

第3章二叉樹問題,

分別用遞歸和非遞歸方式實現二叉樹先序、中序和後序遍歷

打印二叉樹的邊界節點

如何較爲直觀地打印二叉樹

二叉樹的序列化和反序列化

遍歷二叉樹的神級方法

在二叉樹中找到累加和爲指定值的最長路徑長度

找到二叉樹中的最大搜索二叉子樹

找到二叉樹中符合搜索二叉樹條件的最大拓撲結構

二叉樹的按層打印與ZigZag打印

調整搜索二叉樹中兩個錯誤的節點

判斷t1樹是否包含t2樹全部的拓撲結構

判斷t1樹中是否有與t2樹拓撲結構完全相同的子樹

判斷二叉樹是否爲平衡二叉樹

根據後序數組重建搜索二叉樹

判斷- -棵二叉樹是否爲搜索二叉樹和完全二叉樹

通過有序數組生成平衡搜索二叉樹

在二叉樹中找到一個節點的後繼節點

在二叉樹中找到兩個節點的最近公共祖先

Tarjan算法與並查集解決二叉樹節點間最近公共祖先的批量查詢問題

二叉樹節點間的最大距離問題

派對的最大快樂值

通過先序和中序數組生成後序數組

統計和生成所有不同的二叉樹

統計完全二叉樹的節點數

第4章遞歸和動態規劃,斐波那契數列問題的遞歸和動態規劃

矩陣的最小路徑和

換錢的最少貨幣數

機器人達到指定位置方法數

換錢的方法數

打氣球的最大分數

最長遞增子序列

信封嵌套問題

漢諾塔問題

最長公共子序列問題

最長公共子串問題

子數組異或和爲0的最多劃分

最小編輯代價

字符串的交錯組成

龍與地下城遊戲問題

數字字符串轉換爲字母組合的種數

表達式得到期望結果的組成種數

排成一條線的紙牌博弈問題

跳躍遊戲

數組中的最長連續序列

N皇后問題

第5章字符串問題.判斷兩個字符串是否互爲變形詞;

判斷兩個字符串是否互爲旋轉詞

將整數字符串轉成整數值

字符串的統計字符串

判斷字符數組中是否所有的字符都只出現過一- 次

在有序但含有空的數組中查找字符串

字符串的調整與替換

翻轉字符串

完美洗牌問題

刪除多餘字符得到字典序最小的字符串

數組中兩個字符串的最小距離

字符串的轉換路徑問題

添加最少字符使字符串整體都是迴文字符串

括號字符串的有效性和最長有效長度

公式字符串求值

0左邊必有1的二進制字符串數量

拼接所有字符串產生字典順序最小的大寫字符串

找到字符串的最長無重複字符子串

找到指定的新類型字符

旋變字符串問題

最小包含子串的長度

迴文最少分割數

字符串匹配問題

字典樹(前綴樹)的實現

子數組的最大異或和

第6章大數據和空間限制,認識布隆過濾器

只用2GB內存在20億個整數中找到出現次數最多的數

40億個非負整數中找到未出現的數

找到100億個URL中重複的URL及搜索詞彙的TopK問題

40億個非負整數中找到出現兩次的數和所有數的中位數

一致性哈希算法的基本原理

島問題

第7章位運算,不用額外變量交換兩個整數的值

不用做任何比較判斷找出兩個數中較大的數

只用位運算不用算術運算實現整數的加減乘除運算

整數的二進制數表達中有多少個1

在其他數都出現偶數次的數組中找到出現奇數次的數

在其他數都出現k次的數組中找到只出現一次的數

第8章數組和矩陣問題,轉圈打印矩陣

將正方形矩陣順時針轉動90°

“之”字形打印矩陣

找到無序數組中最小的k個數

需要排序的最短子數組長度

在數組中找到出現次數大於N/K的數

在行列都排好序的矩陣中找指定數

最長的可整合子數組的長度

不重複打印排序數組中相加和爲給定值的所有二元組和三元組

未排序正數數組中累加和爲給定值的最長子數組長度

未排序數組中累加和爲給定值的最長子數組系列問題

未排序數組中累加和小於或等於給定值的最長子數組長度

計算數組的小和

自然數數組的排序

奇數下標都是奇數或者偶數下標都是偶數

子數組的最大累加和問題

子矩陣的最大累加和問題

在數組中找到一一個局部最小的位置

數組中子數組的最大累乘積

打印N個數組整體最大的TopK

邊界都是1的最大正方形大小

不包含本位置值的累乘數組

數組的partition 調整

求最短通路值

數組中未出現的最小正整數

數組排序之後相鄰數的最大差

做項目的最大收益問題

分金條的最小花費

大樓輪廓問題

加油站良好出發點問題

容器盛水問題

第9章其他題目,從5隨機到7隨機及其擴展,(原問題尉,補充問題,進階問題

一行代碼求兩個數的最大公約數

有關階乘的兩個問題

判斷一個點是否在矩形內部

判斷一個點是否在三角形內部

摺紙問題

能否完美地拼成矩形

蓄水池算法

設計有setAll功能的哈希表

最大的leftMax與rightMax 之差的絕對值

設計LRU緩存結構

LFU緩存結構設計

設計RandomPool結構

並查集的實現

調整[0,x)區間上的數出現的概率

路徑數組變爲統計數組

正數數組的最小不可組成和

累加出整個範圍所有的數最少還需幾個數

一種字符串和數字的對應關係

1到n中 1出現的次數

從N個數中等概率打印M個數

判斷一個數是否是迴文數

在有序旋轉數組中找到最小值

在有序旋轉數組中找到一個數

數字的英文表達和中文表達

分糖果問題

一種消息接收並打印的結構設計

隨時找到數據流的中位數

在兩個長度相等的排序數組中找到上中位數

在兩個排序數組中找到第k小的數

兩個有序數組間相加和的Topk問題

出現次數的Topk問題

Manacher算法

KMP算法

丟棋子問題

畫匠問題

郵局選址問題

這份【程序員代碼面試指南: IT 名企算法與數據結構題目最優解(第2版)】共有578頁,需要完整版的朋友,可以轉發此文關注小編,github地址:https://github.com/Java-xiaoluo/Java-note

總結

一、來看一下大牛對本文的高度評價!

二、相比第一版的內容,第2版有什麼新的內容增加或者修改呢?

1.修改了第1版部分題目的解釋,並增加了更多示例。

2.增加了很多近年來新出現的流行面試題,刪掉了已經很少出現的低頻面試題。

3.把經常出現的解題套路與算法原型做了結構化的調整和總結。

4.本文所有題目的代碼都用Java語言實現,但這並不會妨礙其他語言使用者的閱讀。

這是因爲筆者盡最大努力迴避了與Java語言特性相關的代碼實現,而且儘量遵循大多數編程語言共有的寫法習慣。因此,將本書中的Java語言實現改寫成其他語言的實現是非常容易的。

5.在Java語言中,如果想得到字符串str第i個位置的字符,則需用如下方式:

char p = str.charAt(i);

本文提供的函數中有大量參數爲字符串類型的函數,但如上所示的方式並不符合大多數讀者的閱讀習慣。爲了讓代碼更加易讀,筆者在這些函數中把字符串類型的參數轉換成char類型數組的變量來使用。例如:

char] charArr = str.toCharArray();

此時得到字符串str第i個位置的字符,可以用如下方式:

char p = charArr[i];

在本文中,發生如上轉換行爲的函數在估算額外空間複雜度時,筆者並沒有把charArr的空間計算在內,這是因爲如果不轉換成char數組,而是選擇直接使用原參數str,也是完全可以的,之所以選擇轉換,僅僅是爲了讓讀者更容易讀懂代碼;是否進行轉換對算法的邏輯沒有任何影響,所以不把charArr的空間算作必須使用的額外空間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章