原创 kmp算法的基本原理和實現方法(Java)

介紹: 1)、KMP是一個解決模式串在文本串是否出現過,如果出現過,最早出現的位置的經典算法 2)、Knuth-Morris-Pratt 字符串查找算法,簡稱爲 “KMP算法”,常用於在一個文本串S內查找一個模式串P 的出現位置,

原创 LeetCode-Array-三數之和(Java)

題目描述: 給定一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。 注意:答案中不可以包含重複的三元組。 例如, 給定數組

原创 弗洛伊德(Floyd)算法介紹和實現(Java)

弗洛伊德(Floyd)算法介紹 和Dijkstra算法一樣,弗洛伊德(Floyd)算法也是一種用於尋找給定的加權圖中頂點間最短路徑的算法。該算法名稱以創始人之一、1978年圖靈獎獲得者、斯坦福大學計算機科學系教授羅伯特·弗洛伊德

原创 迪傑斯特拉(Dijkstra)算法的基本介紹和實現方法(Java)

迪傑斯特拉(Dijkstra)算法介紹 迪傑斯特拉(Dijkstra)算法是典型最短路徑算法,用於計算一個結點到其他結點的最短路徑。 它的主要特點是以起始點爲中心向外層層擴展(廣度優先搜索思想),直到擴展到終點爲止。 算法過程:

原创 平衡二叉樹的基本原理和實現方法(Java)

平衡二叉樹(AVL樹)的來源: 看一個案例(說明二叉排序樹可能的問題) 給你一個數列{1,2,3,4,5,6},要求創建一顆二叉排序樹(BST), 並分析問題所在. BST 存在的問題分析: 1)、左子樹全部爲空,從形式上看,更像

原创 LeetCode-Array-【62】【63】不同路徑(Java)

【62】題目描述 一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記爲“Start” )。 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記爲“Finish”)。 問總共有多少條不同的路

原创 LeetCode-Array-【53】最大子序和(Java)

題目描述: 給定一個整數數組 nums ,找到一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子數組 [4,-1,2,

原创 普里姆算法的基本介紹和實現方法(Java)

應用場景-修路問題 題目:有勝利鄉有7個村莊(A, B, C, D, E, F, G) ,現在需要修路把7個村莊連通 各個村莊的距離用邊線表示(權) ,比如 A – B 距離 5公里 問:如何修路保證各個村莊都能連通,並且總的修

原创 LeetCode-Array-【54】螺旋矩陣(Java)

題目描述: 給定一個包含 m x n 個元素的矩陣(m 行, n 列),請按照順時針螺旋順序,返回矩陣中的所有元素。 示例 1: 輸入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 輸出:

原创 LeetCode-Array-【34】在排序數組中查找元素的第一個元素和最後一個元素(Java)

題目描述: 給定一個按照升序排列的整數數組 nums,和一個目標值 target。找出給定目標值在數組中的開始位置和結束位置。 你的算法時間複雜度必須是 O(log n) 級別。 如果數組中不存在目標值,返回 [-1, -1]。

原创 LeetCode-Array-移除元素(Java)

題目描述: 給定一個數組 nums 和一個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後數組的新長度。 不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成。 元素的順序可以

原创 動態規劃算法的原理和實現(Java)

動態規劃算法介紹 動態規劃(Dynamic Programming)算法的核心思想是:將大問題劃分爲小問題進行解決,從而一步步獲取最優解的處理算法 動態規劃算法與分治算法類似,其基本思想也是將待求解問題分解成若干個子問題,先求解

原创 LeetCode-Array-【56】合併區間(Java)

題目描述: 給出一個區間的集合,請合併所有重疊的區間。 示例 1: 輸入: [[1,3],[2,6],[8,10],[15,18]] 輸出: [[1,6],[8,10],[15,18]] 解釋: 區間 [1,3] 和 [2,6]

原创 LeetCode-Array-【73】矩陣置零(Java)

題目描述: 給定一個 m x n 的矩陣,如果一個元素爲 0,則將其所在行和列的所有元素都設爲 0。請使用原地算法。 示例 1: 輸入: [ [1,1,1], [1,0,1], [1,1,1] ] 輸出: [ [1,0,1], [

原创 Leetcode-Array-下一個序列【31】(Java)(字典序算法)

題目描述: 實現獲取下一個排列的函數,算法需要將給定數字序列重新排列成字典序中下一個更大的排列。 如果不存在下一個更大的排列,則將數字重新排列成最小的排列(即升序排列)。 必須原地修改,只允許使用額外常數空間。 以下是一些例子,輸