原创 排序(2)

下介紹經典排序算法的空間複雜度 O(1) 插入排序、選擇排序、冒泡排序(時間複雜度O(N^2)) 推排序、希爾排序 O(logN)~O(N) 快速排序 O(N) 歸併排序 O(M) 計數排序、基數排序 M爲

原创 隊列和棧(1)

棧和隊列的基本性質 棧:先進後出 隊列:先進先出 兩者在實現結構上可以有數組和鏈表兩種形式。 1.數組結構實現較容易 2.用鏈表結構較複雜,因爲涉及許多指針操作。 棧結構的基本操作 1.pop操作,彈出棧頂 2.top

原创 二叉樹(2)

二叉樹按層遍歷 1.針對二叉樹的寬度優先遍歷。 第一步:需要藉助隊列,首先將根節點pRoot入隊; 第二步:當隊列不空時,獲得隊首元素並出隊,賦給pRoot,執行第三步; 第三步:如果pRoot左節點存在,則入隊;如果pR

原创 鏈表(1)

鏈表問題知識點和注意事項 1.鏈表問題算法難度不高,但考察代碼實現能力。 2.鏈表和數組都是一種線性結構,鏈表空間不一定保證連續,是臨時分配的 鏈表的分類 1.按鏈接方向分類:單鏈表,雙聊表 2.有無環:普通鏈表,循環鏈表

原创 二叉樹(4)

摺紙問題 把一段紙條豎着放在桌子上,然後從紙條下方向上方對摺1次,壓出摺痕後展開,此時摺痕是凹下去的。若從紙條下方向上方對摺2次,壓出摺痕後展開,此時有三條摺痕,從上到下依次是下摺痕、下摺痕和上摺痕。給定一個輸入參數N,代表紙條

原创 排序(4)

案例4 荷蘭國旗問題。只包含0,1,2的整數數組進行排序,要求使用交換、原地排序,而不是利用計數進行排序。 分析:本題主要過程與快排劃分過程類似。時間複雜度O(N),空間複雜度O(1)。 如圖,一次檢查,爲0,就和首位交

原创 算法競賽入門經典3.5 謎題UVa455

#include <iostream> #include <string>using namespace std; int main(){  char block[5][5]={{'T','R','G','S','J'},{'X','D

原创 字符串(3)

案例7 給定一個字符串str,請將其中所有空格字符替換成“%20”,假設str後面有足夠的空間。 分析: 所以從位置8開始,拷貝 c複製到位置8 朝前遍歷,遇到空格,就5-7位置爲%20 朝前遍歷,遇到b,4爲b

原创 排序(1)

冒泡排序 #include<iostream> #include<vector> using namespace std; int main(){ int num; vector<int>a;

原创 二叉樹(3)

二叉樹的子樹 在二叉樹中以任何一個節點爲頭部的整棵樹稱作二叉樹的子樹。 平衡二叉樹(AVL樹) 1.空樹是平衡二叉樹 2.如果一棵樹不爲空,並且其中所有的子樹都滿足各自的左子樹與右子樹的高度都不超過1。 給定一

原创 棧與隊列(2)

案例1 實現一個特殊棧,在實現基礎棧功能基礎上,能返回棧中最小元素的操作getmin 要求: 1.pop、push、getMin操作時間複雜度都是O(1)。 2.設計的棧類型可以使用現成的棧結構。 方法1:兩個棧,一個棧

原创 二叉樹(1)

二叉樹節點的結構 class Node{ int value; Node left; Node right; Node(int data){ this.valve=data;

原创 棧與隊列(3)

案例5 有一個整型數組arr和一個大小爲w的窗口從數組最左滑到最右邊,窗口每次向右滑一個位置,返回一個長度爲n-w+1的數組res,res[i]表示每一種窗口狀態下的最大值,以數組爲[4,3,5,4,3,3,6,7],w=3爲例

原创 鏈表(2)

案例1 給定一個整數num,如何在節點值有序的環形鏈表中插入一個節點值爲num的節點,且保證這個環形單鏈表依然有序。 解法:時間複雜度O(N),額外空間複雜度O(1)。 插入node,返回head即可。 3.若p和

原创 字符串(1)

字符串面試題的特點 廣泛性 1.字符串可以看做字符類型的數組,與數組排序、查找、調整有關 2.很多其它類型面試題可看作自字符串類型的面試題。 需掌握的概念 1.迴文 題目(1) 判斷一個字符串是否爲迴文 解法:遞歸