原创 【數據結構與算法】LCS(連續)

今年阿里的筆試題,就有一道是求連續的公共子串。 思路一:我當時第一反應是把其中較短的一個串的所有子串的都求出來,然後用這些子串(先用長度較長的)去長串裏面做匹配。後來一想效率太低了。 思路二:效仿不連續的LCS問題,先把表填了,然後再在表

原创 【數據結構與算法】圖的深度與廣度遍歷

圖的深度遍歷與廣度遍歷與二叉樹的遍歷類似,但是因爲是圖,需要有個數組存一下點是否被遍歷過。 代碼實現/** * 源碼名稱:GraphIterateMatrix.java * 日期:2014-08-25 * 程序功能:圖的深度與廣

原创 【數據結構與算法】java鏈表操作

鏈表操作代碼量少但是比較容易出錯,是比較適合面試的地方。 代碼實現/** * 源碼名稱:MyLinkList.java * 日期:2014-09-05 * 程序功能:java鏈表操作 * 版權:CopyRight@A2BGee

原创 【數據結構與算法】重建二叉樹

只能根據前序中序或者中序後序重建二叉樹,不可能根據前序和後序重建,因爲需要中序去劃分左右子樹。 代碼實現/** * 源碼名稱:ConstructBT.java * 日期:2014-09-05 * 程序功能:重建二叉樹(前序中序)

原创 【leetcode系列】Valid Parentheses

很經典的問題,使用棧來解決,我這裏自己實現了一個棧,當然也可以直接用java自帶的Stack類。 自己實現的棧代碼: import java.util.LinkedList; class StackOne { LinkedList<O

原创 【數據結構與算法】二叉樹廣度遍歷

二叉樹的廣度遍歷想想還是比較簡單的,利用隊列存儲當前結點的左兒子和右兒子用作未來的訪問。 代碼實現/** * 源碼名稱:TreeBFS.java * 日期:2014-08-25 * 程序功能:二叉樹廣度遍歷 * 版權:Cop

原创 【數據結構與算法】二路歸併排序

空間複雜度由於輔助空間剛好要佔用那個單元,但每一趟歸併後這些空間就被釋放了,所以歸併排序的空間複雜度是O(n)。 時間複雜度每趟歸併的時間複雜度是O(n),共需要進行log2n趟歸併,所以時間複雜度是O(n*log2n)。 代碼實現/**

原创 【數據結構與算法】二分查找

基本思想首先將給定的值K與表中中間位置元素比較,若相等,則查找成功;若不等,則所需查找的元素只能在中間數據以外的前半部分或者後半部分,縮小範圍後繼續進行同樣的查找,如此反覆,直到找到爲止。 代碼實現/** * 源碼名稱:BinarySe

原创 【數據結構與算法】二叉樹深度遍歷(遞歸)

二叉樹的深度遍歷用遞歸的話就沒有什麼好說的了。 代碼實現/** * 源碼名稱:TreeIteratorRecursion.java * 日期:2014-08-23 * 程序功能:二叉樹深度遍歷 * 版權:CopyRight@

原创 【數據結構與算法】字符串匹配KMP算法

首先需要了解一下BF暴力匹配算法,這個算法爲每一個串設置一個指針,然後兩個指針同時後移,出現不匹配的情況後,主串指針回到開始後移之前的位置的下一位,模式串指針回到最開始。 對比一下KMP算法,同樣是設置兩個指針,然後兩個指針同時後移,出現

原创 【數據結構與算法】LCS(不連續)

這個問題很經典,典型的動態規劃,動態規劃就是填一個表,然後遍歷一下就行了。 代碼實現/** * 源碼名稱:LCSequence.java * 日期:2014-09-02 * 程序功能:LCS(不連續) * 版權:CopyRi

原创 【數據結構與算法】二叉樹深度遍歷(非遞歸)

據說這個筆試面試的時候很容易考到,所以寫到這裏。 圖示 代碼實現/** * 源碼名稱:TreeIteratorNoRecursion.java * 日期:2014-08-23 * 程序功能:二叉樹深度遍歷(非遞歸) * 版權

原创 【數據結構與算法】選擇排序

選擇排序沒什麼好說的,直接上代碼吧 public class SelectSort { public void selectSort(int[] in) { int inLength = in.length; int minIn

原创 【數據結構與算法】冒泡排序

排序算法是一種基本、常用的算法。排序算法分爲內部排序和外部排序。 內部排序是指整個排序過程不需要訪問外存就能完成。 外部排序是指黨對大批量數據進行排序時,不可能一次性將全部數據裝入內存,只能從外存讀取一部分數據到內存中,將內存中的數據進行