原创 容器的使用

Top K Frequent Elements 給定一個非空整數數組,返回前K個最頻繁的元素 輸入:nums = [1, 1, 1, 2, 2, 3],k = 2 輸出:[1, 2] /* 思路:遇到這種top k的題目,一般都

原创 回溯法

回溯法是五大常用算法之一,回溯法也是一種暴力算法。我們在圖的深度遍歷時,其實就用到了回溯法,先選擇一條路走,當出現走不通的情況,再返回上一種重新選擇一種走法,直到遍歷所有節點。常見的八皇后問題也能夠使用回溯法來求解。 八皇后問題

原创 貪心算法

跳躍遊戲 LeetCode 45 給定一個非負矩陣,矩陣中每個位置的數字代表從這個位置最多可以跳的跳數。目標是求出到達最後一個元素的最小跳數。 輸入: [2, 3, 1, 1, 4] 輸出: 2 解釋: 從0位置跳到1位置,再從1

原创 進制轉換

各種機制轉換函數 strtol函數 它的功能是將一個任意1-36進制數轉化爲10進制數,返回long int型。 函數爲long int strtol(const char *nptr, char **endptr, int

原创 動態規劃

編輯距離 LeetCode 72 給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少操作數 。 你可以對一個單詞進行如下三種操作: 插入一個字符 刪除一個字符 替換一個字符 方法: /*採

原创 字符串處理問題

大小寫轉換 LeetCode 709 To Lower Case 輸入一個字符串,輸出相同的小寫後的字符串 舉例1: 輸入:”Hello” 輸出:”hello” 舉例2: 輸入:”here” 輸出:”here” 舉例3: 輸入:”LO

原创 其他問題

不使用加號的加法 LeetCode 371 輸入:a=1,b=2 輸出:3 /* 思路:不使用加號的加法一般有三步:1)計算a^b,這個計算出來的是不考慮進位的值;2)a&b這個計算出來的是考慮進位的值;3)將考慮進位的值向左移動1位,

原创 面試知識點總結——虛繼承

背景: 儘管在派生列表中同一個基類只能出現一次,但實際上派生類可以多次繼承同一個類。派生類可以通過它的兩個直接基類分別繼承同一個間接基類,也可以直接繼承某個基類,然後通過另一個基類再一次間接繼承該類。 出現的問題: 在默認情況下,派生類

原创 面試知識點總結——迭代器失效問題

在STL中的容器按存儲方式分爲兩類,一類是按以數組形式存儲的容器(如:vector、deque);另一類是以不連續節點形式存儲的容器(如:list、set、map)。在使用erase方法來刪除元素時,需要注意一些問題。 list, se

原创 Top K問題

出現頻率Top k的元素 LeetCode 347 給定一個非空整數數組,返回出現最多的k個元素 輸入:[1,1,1,2,2,3] k=2 輸出:[1,2] /* 思路:對於此類求top k的問題,都可以用堆排序來實現。map容器和se

原创 面試知識點總結——STL中map的用法

map屬於關聯容器,提供一對一的數據處理能力。內部是由紅黑樹實現的,具有自動排序能力。因此map內部的所有數據是有序的。 1. 插入操作 在map中插入數據有三種方法: 使用數組 用數組方式插入數據 #include<i

原创 面試知識點總結——new/delete和malloc/free的區別

new/delete是C++中的操作符,而malloc/free是函數,他們都是用來進行動態內存管理的,主要區別如下: new申請的空間在堆或靜態存儲區,而malloc申請的在堆 new在申請空間後會調用構造函數初始化,但是malloc

原创 面試知識點總結——排序算法

排序算法比較 冒泡排序 選擇排序 插入排序 希爾排序 歸併排序 堆排序 快速排序 時間(平均) O(n2) O(n2) O(n2) O(n1.3) O(nlogn) O(nlogn) 時間(最好) O(n) O(n2) O

原创 面試知識點總結——C++中公有繼承、私有繼承和保護繼承的區別

假設基類是一個快要退休的富豪,代碼如下: class RichMan { public: RichMan(); ~RichMan(); int m_company; private: int m_money

原创 面試知識點總結——構造函數私有化或保護化

本節內容將討論構造函數能否私有化/保護化,構造函數能否繼承和重寫,能否將構造函數聲明爲虛函數的問題。 構造函數私有化/保護化 可以將構造函數設置爲私有函數,但是這樣做就無法從外部直接調用構造函數,因此就無法直接構造這個類的對象。但是爲