原创 數據結構 AVL樹

前言 大家都玩過球球大作戰的遊戲吧,他的原型是Agar.IO,在這款遊戲了我們扮演一個小球,剛出生的我們除了速度快,視野生存能力都一般,爲了追求某種平衡,通過不斷的吞噬其他小球來讓自己變大,變長,但是我們的速度卻在下降.這個追逐平衡的過程

原创 面試題四 替換字符中的空格

題目: 請實現一個函數,把字符串中的每個空格替換成“%20”,例如輸入“Hello World” ,輸出“Hello%20World 輸入: Hello World 輸出: Hello%20World 實現思路: 一般我們可以用遍歷的方法

原创 面試題五 從頭到尾打印單鏈表

題目: 輸入一個單鏈表,從尾部到頭部打印單鏈表的每個值 輸入: 由於我的單鏈表是使用頭插法的,所以當你輸入4321的時候,節點從頭部到尾部的順序是1234,所以,當我們輸入4321的時候,只要保證輸入和輸出一樣就完全正確。 輸出: 跟輸入

原创 面試題11 :O(1)刪除單鏈表節點

題目: 寫一個函數delectNode(Node header,Node delectNode),在O(1)的時間刪除該節點。 輸入: 輸入一個頭插法的單鏈表。從頭到尾是321,要刪除的節點是鏈表頭 輸出: 21 解題思路: 目前想到有兩

原创 面試題九斐波那契和青蛙跳臺階

題目: 要求輸入一個整數n,請你輸出斐波那契數列的第n項。 如下: 輸入: 一個正整數n 輸出: 斐波那契數列的第n項 解題思路: 有兩種,是通過遞歸來實現,這種方法最大壞處是在於很多地方是重複計算的,所以,我們可以考慮從下往上來實現這

原创 劍指offerJava實現 二維數組的查找

序言 劍指offer上的題都非常經典,而且在一些大公司,也會出劍指offer上的原題,所以無論從研究和鍛鍊自己算法能力的還是提升自己求職競爭力的角度來說,都是非常有幫助的。 題目描述 在一個二維數組中,每一行都是從左到右遞增,每一列都是從

原创 面試題八 旋轉數組的最小數字

題目: 輸入一個按遞增排序數組的一個旋轉,輸出該數組的最小數字。 輸入: 12345的旋轉可以是34512,所以我們輸入34512. 輸出: 1 解題思路: 較爲直觀的方法是每一個數據都掃描一遍,找到最小的元素,這樣的時間複雜度爲0(N)

原创 面試題17 合併兩個排序鏈表

題目: 輸入兩個遞減鏈表,合併這兩個鏈表之後的節點依然是按遞減排序的。如下所示,讓鏈表一和鏈表二變成鏈表三。 鏈表一: 鏈表二: 鏈表三: 輸入: 鏈表一和鏈表二都是採取頭插法的單鏈表。 輸出: 鏈表三 解題思路: 鏈表先從頭結點合

原创 數值的整數次方

題目: 實現函數Power(double base,int exponed),求base的exponed次方,不能使用庫函數,不需要考慮大數問題。 輸入: 輸入一個浮點型數字和一個整數數字(不管正負) 輸出: 浮點數的整數次方 解題思路:

原创 Java數據結構 劃分算法

前言        在現實生活中,當我們遇見好看的姑娘,我們很可能經驗性的把她劃分到美女一組裏,而長相不那麼給力的姑娘,分到別的組裏,那麼,分組的這麼一個過程,其實就是劃分算法,在劃分算法裏,我們往往需要一個pivot,來對姑娘進行分類,

原创 基礎數據結構之棧和隊列

前言 我們生活中會遇見很多的看起來很棘手的問題,比如一堆尚未處理的郵件,正要去電影院排隊購買一張電影票(兩張也可以,你值得擁有...),這些我們用自己熟悉的方式來處理他們,而我們自己熟悉的這些方式,很可能就和棧和隊列有關.今天,我們就來談

原创 Java數據結構與算法之插入排序

前言 排序算法可以分爲基本排序算法和高級排序算法,如果從基本算法裏找出性能最好的算法,那麼插入排序算是不二之選了.他的時間複雜度T(n2),但是要比冒泡和選擇排序都要快一點.他的實現類似於QQ鬥地主中抓牌一樣.把一個待排序的數據按照大小,

原创 Java數據結構之快速排序

前言      快速排序是面試中非常常見的排序算法,工作中,快速排序的效率也是我們常常用到的,他的發展來源於劃分算法,採用的是分治策略. 實現思路     先從數組中選擇一個pivot,    遍歷數組,講數組中比pivot大的數放到其

原创 數據結構 二叉樹

前言 再說二叉樹遍歷之前,先說一下二叉樹的概念.二叉樹是節點最多有兩個子樹的結構,他的子樹一般稱爲左子樹和右子樹.二叉樹的遍歷 就是通過 或者中序遍歷,或者前序遍歷,或者後序遍歷把二叉樹的數據輸出.官方的解釋是從根節點出發,按照某種次序訪

原创 面試題19 二叉樹的鏡像

題目: 輸入一個二叉樹,輸出該二叉樹的鏡像 輸入: 二叉排序樹的前序遍歷:8 2 4 7 9 10  輸出: 該二叉樹的鏡像的前序遍歷:8 9 10 2 4 7  解題思路: 本質上就是不停的交換二叉樹的左子樹和右子樹,直到樹的葉節點或者