原创 數組中第K大(小)的元素

題目描述:在未排序的數組中找到第 k 個最大的元素。請注意,你需要找的是數組排序後的第 k 個最大的元素,而不是第 k 個不同的元素。 這是一道排序問題?顯然當數組元素N很大時,採用一般O(N^2)的排序算法(如冒泡排序)一定會超時。 所

原创 線性表(二)--- 單鏈表

鏈式存儲結構的線性表 簡稱爲鏈表。是採用一組地址任意的存儲單元存放線性表中的元素數據。它需要在每一個數據元素裏保存一個引用下一個數據元素的引用 --- 指針。單鏈表 --- 每個節點只保留一個引用, 該引用指向當前節點的下一個節點, 沒有

原创 並查集(Union-find set)

它是一種維護集合的數據結構,它的名字"並" "查" "集" 。即 union / find / set。 並查集產生的每個集合都是一棵樹(tree) 。基本操作: 1.合併兩個集合union。 2.判斷兩個元素是否在一個集合中find。

原创 滑動窗口(一)

什麼是滑動窗口?大致就是如下圖:維護left和right兩個指針,在整個區間內,通過改變左右指針的移動,找到滿足條件的區間(很多時候是最佳區間)。窗口的大小是在移動過程中可能是改變的。 目的:常用於將嵌套的循環問題,轉換爲單循環問題,降

原创 遞歸模擬哈諾塔移動過程

漢諾塔問題:https://baike.baidu.com/item/%E6%B1%89%E8%AF%BA%E5%A1%94/3468295?fr=aladdin 思路: 先借助C將A上面n-1個盤子移到B中;然後將A上最大的盤子移到C中

原创 *p, *&p, &*p的區別

#include<iostream> using namespace std; int main(){ //&: 取地址(引用), *取值(解引用) int a = 10; int *p = &a; //&a: 取a的地址值

原创 二叉搜索樹

二叉搜索樹是以一棵二叉樹來組織的,如下圖所示。這樣一棵樹可以使用一個鏈表數據結構來表示,其中每個結點就是一個對象。除了key和衛星數據之外,每個結點還飲食屬性left, right 和 p, 它們分別指向結點的左孩子,右孩子和雙新。如果某

原创 基數排序

基數排序的總體思路就是將待排序的數據拆分成多個關鍵字進行排序,也就是說,基數排序的實質是多關鍵字排序。而多關鍵字排序的思路是將待排序的數據裏的排序關鍵字拆分成多個排序關鍵字:第1個、第2個、第3個......然後,根據子關鍵字對 待排序數

原创 隊列(二)-------循環隊列

剛前一篇(點擊打開鏈接)也說到順序隊列存儲時的問題,所以引出循環隊列的解決方案。      因爲前一篇也說到了隊列的基本概念,所以這裏使用圖示和代碼直接理解。圖示(製作簡陋,請見諒):此時可以看出來rear當滿了之後,就轉頭從0開始,繼續

原创 快速排序

快速排序利用分治的思想:1.分解:數組A[p....r] 分爲 A[p....q -1] 和A[q + 1....r](可能有空的),使得前者的每一個元素都小於A[q],後者的每一個元素都大於A[q]。2.解決:遞歸使用快速排序,對子數組

原创 隊列(四)---java中的Queue接口和Deque接口

 java中的隊列利用的是java提供的Queue接口,該接口代表了一個隊列。包含了三個標誌性的方法: 插入:在隊列的rear端插入數據。刪除:在隊列的front端刪除數據。訪問:訪問front端的數據元素。方法對比:拋出異常版本返回特殊

原创 隊列(三) --- 隊列的鏈式存儲

類似使用鏈式存儲結構保存線性表, 這裏也可以使用鏈式結構存儲隊列中的各元素,我們可以稱置爲鏈隊列。主要就是插入隊列和移除隊列,可參看一下(製作粗糙,請見諒):(依次是原隊列、插入元素、刪除數據後的形式)參考代碼:public class

原创 棧Stack(一)--- 棧的順序存儲

在介紹雙向隊列接口(Deque)時,就拿棧(Stack)與它相比較,可以看出棧是只能在一頭進行操作的一種數據結構。就棧而言 : 我們將進行插入和刪除的一端叫做棧頂,相應地另一端也就是棧底。進棧與出棧: * 棧頂插入一個元素 --- 進棧 

原创 桶排序

桶排序的原理和計數排序類似,可以說是計數排序的升級版。他利用了函數映射關係,將輸入的值映射到對應的桶裏面去。所以他的高效就在於這個映射函數的確定。所以需要做到如下兩點:1.在額外空間充足的情況下,儘量增大桶的數量。2.使用映射函數能將輸入

原创 線性表(三)--- 雙向鏈表

就是給每個節點保留兩個引用prev和next,其中prev指向前一個節點,next指向後一個節點。該鏈表既可以向後依次訪問每個節點,也可以向前其次訪問每個節點,以這種形式保存的節點稱爲雙向鏈表。查找:既可以從header(頭節點),也可以