原创 排序算法(三)--快速排序

快速排序:每次尋找一個主元(pivot),將所有比pivot小的元素放在它的左邊,將所有比pivot大的元素放在它的右邊;再對左右子列進行遞歸直到子序列長度爲1。 1.時間複雜度:O(NLogN),在高級排序中是最快的,但是如果數據量較小

原创 排序算法(一)

一、基本概念: 1.排序算法是一種很重要的算法,許多其他算法是以排序算法爲基礎的。排序算法主要有冒泡排序、插入排序、希爾排序、選擇排序、堆排序、歸併排序、快速排序。 2.內部排序:在內存空間裏完成數據的排序,一次完成 3.排序的穩定性:如

原创 數據結構--二叉樹

一、二叉樹: 1.二叉樹是樹的一種特殊的形式,每個結點的度最大爲2,且有左右之分。 2.性質: 非空二叉樹第 i 層最多 2(i-1) 個結點 (i >= 1) 深度爲 k 的二叉樹最多 2k - 1 個結點 (k >= 1) 度爲 0

原创 數據結構--棧

一、定義: 1.棧是一個受限制的線性表,僅限定在棧頂進行插入/刪除操作。先入棧的元素後出棧。 2.棧的存儲表示方法:順序棧、鏈式棧。 3.棧的基本操作:init(), push(), pop(), top(), IsEmpty(), Le

原创 鏈表

一、鏈表 1.鏈表即爲線性表的鏈式存儲結構,邏輯上相鄰的元素在物理上不相鄰。   2.通過指針來實現元素之間的邏輯關係,一個鏈表由數據域和指針域構成。   3.相對於順序表,鏈表不能實現隨機存儲,查找元素需要從頭開始遍歷;但是鏈表在對元素

原创 刷leetcode-day41

一、題目: 141.環形鏈表: 給定一個鏈表,判斷鏈表中是否有環。 爲了表示給定鏈表中的環,我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有環。   示例 1: 輸入:

原创 刷leetcode-day40

一、題目: 94、二叉樹的中序遍歷: 給定一個二叉樹,返回它的中序 遍歷。 示例: 輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [1,3,2] 二、思路: 使用二叉樹中序遍歷的遞

原创 刷leetcode-day39

一、題目: 921.使括號有效的最少添加: 給定一個由 '(' 和 ')' 括號組成的字符串 S,我們需要添加最少的括號( '(' 或是 ')',可以在任何位置),以使得到的括號字符串有效。 從形式上講,只有滿足下面幾點之一,括號字符串纔

原创 刷leetcode-day38

一、題目: 739.每日溫度 根據每日 氣溫 列表,請重新生成一個列表,對應位置的輸入是你需要再等待多久溫度纔會升高的天數。如果之後都不會升高,請輸入 0 來代替。 例如,給定一個列表 temperatures = [73, 74, 75

原创 刷leetcode-day36

一、題目 496.下一個更大的元素 給定兩個沒有重複元素的數組 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每個元素在 nums2 中的下一個比其大的值。 nums1 中數字 x 的下一個更大

原创 刷leetcode-day34

一、題目: 682.棒球比賽 你現在是棒球比賽記錄員。 給定一個字符串列表,每個字符串可以是以下四種類型之一: 1.整數(一輪的得分):直接表示您在本輪中獲得的積分數。 2. "+"(一輪的得分):表示本輪獲得的得分是前兩輪有效 回合得分

原创 刷leetcode-day35

一、題目: 844、比較含退格的字符串 給定 S 和 T 兩個字符串,當它們分別被輸入到空白的文本編輯器後,判斷二者是否相等,並返回結果。 # 代表退格字符。   示例 1: 輸入:S = "ab#c", T = "ad#c" 輸出:t

原创 刷leetcode-day33

一、題目: 61.旋轉鏈表 給定一個鏈表,旋轉鏈表,將鏈表每個節點向右移動 k 個位置,其中 k 是非負數。 示例 1: 輸入: 1->2->3->4->5->NULL, k = 2 輸出: 4->5->1->2->3->NULL 解釋

原创 刷leetcode-day32

一、題目: 86.分隔鏈表 給定一個鏈表和一個特定值 x,對鏈表進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。 你應當保留兩個分區中每個節點的初始相對位置。 示例: 輸入: head = 1->4->3->2->5-

原创 刷leetcode-day31

一、題目: 19.刪除鏈表中倒數第n個結點 給定一個鏈表,刪除鏈表的倒數第 n 個節點,並且返回鏈表的頭結點。 示例: 給定一個鏈表: 1->2->3->4->5, 和 n = 2. 當刪除了倒數第二個節點後,鏈表變爲 1->2->3