原创 通用算法 -[排序算法] -希爾排序

1、算法由來 我們知道,簡單插入排序在數據規模較小和數據基本有序時十分高效。 那如果數據規模較大,並且無序時,有什麼樣的方法可以提高簡單插入排序的效率呢? 希爾排序正是爲此而生,它通過構造(1)小規模數據和(2)讓數據基本有序的條

原创 通用算法 - [數組算法] -數組的前綴和

1、前綴和介紹 對於一個數組AAA,我們新建一個長度相等的數組BBB,新數組中的每一項B[i]B[i]B[i]表示的是數組AAA的前iii項和,即 前綴和:BBB中的每一項B[i]B[i]B[i]保存A[0,1,...,i]A[0

原创 通用算法 -[排序算法] -歸併排序

1、算法思想 歸併排序的基本思想是,把大的數組劃分成兩個子數組,然後分別對這兩個子數組分別進行排序,之後在把這兩個排好序的子數組合併成一個有序的數組。由於兩個小的數組都是有序的,所以在合併的時候是很快的。 通過遞歸的方式將大的數組

原创 leetcode-[數組、雙指針-對撞指針] - 乘最多水的容器(11)

1、問題描述 給定一個有n個非負整數的數組,以數組的索引作爲x座標,對應索引的元素值作爲y座標,找到兩個座標(x1,y1)和(x2,y2),使得他們與x軸圍成的矩形面積最大。 如下圖所示,圖中垂直線的高度代表輸入數組 [1,8,6

原创 leetcode-[數組、雙指針、二分搜索]-尋找重複數(287)

1、問題描述 給定一個包含n+1個整數的數組nums,其中,每個整數的取值範圍爲[1,n],根據鴿巢原理可知,至少存在一個重複的整數。假設只有一個重複的數,找出這個數。 2、解題思路 邊界條件與特殊情況:(1)nums中整數的個

原创 leetcode -[動態規劃、最大連續子數組] - 買賣股票的最佳時機(121)

1、問題描述 給定一個數組,數組中的第i個元素表示一支給定股票第i天的價格。 如果你最多隻許完成一筆交易,即只能買入一次和賣出一次, 設計一個算法來計算你能獲得的最大收益。 注意,你不能在買入股票前賣出股票。 示例1: 輸入:[

原创 通用算法 - [樹結構] - 二叉搜索樹

1. 二叉搜索樹的概念 二叉搜索樹,又稱二叉排序數或二叉查找樹。 它要麼一棵空樹,要麼具有如下性質: (1)若它的左子樹不爲空,則左子樹上所有節點的值都小於根節點的值; (2)若它的右子樹不爲空,則右子樹上所有節點的值都大於根節點

原创 leetcode - [鏈表] - (83) 刪除排序鏈表中的重複元素

1、問題描述 給定一個排序鏈表,刪除鏈表中的重複元素,使得鏈表中的每個元素只出現一次。 示例: 輸入:1->2->2->3->4->4->5 輸出:1->2->3->4->5 2、解題思路 邊界條件與特殊情況:(1)鏈表爲空;

原创 leetcode - [動態規劃] -最大加號標誌(764)

1、問題描述 在一個大小在(0,0)到(N-1,N-1)的2D網格grid中,除了mines給出的單元格爲0,其他單元格都爲1。網格中包含1的最大軸對稱加號的階是多少,返回最大軸對稱加號的階。如果不存在軸對稱加號,則返回0. 一個

原创 通用算法 -[排序算法] - 快速排序

1、算法思想 快排算法的基本思想是,選取待排序數組中的任意一個元素作爲基準值,遍歷數組中的元素。把小於基準值的元素放到基準值的左邊,大於基準值的元素放到基準值的右邊,基準值放到兩者之間,此時,基準值到達最終的位置。然後對基準值左邊

原创 leetcode - [棧、動態規劃] - 最大矩形(85)

1、問題描述 給定一個只包含0、1的二進制二維矩陣,找出只包含1的最大矩形,並返回其最大面積。 示例: 輸入: [ [“1”,“0”,“1”,“0”,“0”], [“1”,“0”,“1”,“1”,“1”], [“1”,“1”,“

原创 leetcode - [棧] -柱狀圖中的最大矩形(84)

1、問題描述 給定n個非負整數,用來表示柱狀圖中每個柱子的高度。每個柱子彼此相鄰,且寬度爲1. 求柱狀圖中能勾勒出的最大面積。 以上是柱狀圖的示例,其中每個柱子的寬度爲 1,給定的高度爲 [2,1,5,6,2,3]。 圖中陰影

原创 通用算法 -[排序算法] -計數排序

1、算法思想 計數排序是一種適合於最大值和最小值的差值不是不是很大的排序。 基本思想:就是把數組元素作爲數組的下標,然後用一個臨時數組統計該元素出現的次數,例如 temp[i] = m, 表示元素 i 一共出現了 m 次。最後再把

原创 leetcode - [鏈表] - (2) 兩數相加

1、問題描述 使用兩個非空的鏈表來表示兩個非負整數,其中鏈表的每個節點存儲着數位上的一個數,且按照逆序存儲。 將兩數加和,返回一個新的鏈表來表示這兩個數的和。 您可以假設除數字0外,這兩個數都不會以0開頭。 示例: 輸入:(2->

原创 通用算法 - [字符串] - KMP算法

1、KMP算法介紹 KMP算法是一種改進的字符串匹配算法。KMP算法主要是通過消除主串指針的回溯以達到快速匹配的目的。具體實現就是生成一個next數組,next數組本身包含了模式串的局部匹配信息。時間複雜度O(m+n)。 2、KM