挑戰程式設計競賽2 資料結構與演算法學習筆記
相關推薦
挑戰程式設計競賽2 資料結構與演算法學習筆記
例題 有一組n個數,求在這組數中 str[j]-str[i] 的最大值,且j>i., 2<n<20000。 我最初的思路是, max=0; for(i=0;i<n;i++) { for(j=0;j<i;j++) { i
資料結構與演算法學習筆記 2 (2018.10.06)
演算法分析 兩個主要方面: 正確性:演算法的功能與問題要求一致? 數學證明?可不那麼簡單... 成本:執行時間 + 所需儲存空間
資料結構與演算法學習筆記之後進先出的“桶”
前言 棧最為一種的常用的資料結構,用“桶”來形容最合適不過;今天我們就來學習一下 正文 一、棧的定義? 1.“後進先出,先進後出”的資料結構。 2.從操作特性來看,是一種“操作受限”的線性表,只可以在一端插入和刪除資料。 二、為什麼需要棧?
#資料結構與演算法學習筆記#劍指Offer29:整數中1出現的次數 + 分段思想/按位考慮 + 測試用例(Java、C/C++)
2018.10.5 感受到開學之後工作和課業的雙重壓力,加上近段時間自己出了點小事故,因此斷更了許久。沒事,繼續。 這道題有兩種複雜度為的演算法。 方法1:遞迴(分段思想)。 所有數字出現1的個數 = 每一段數字中出現1的個數之和 1. 對於輸出的數字n,其最高位為
資料結構與演算法學習筆記 1 (2018.10.05)
演算法 計算=資訊處理 藉助某種工具,遵照一定規則,以明確而機械的形式進行 計算模型=計算機=資訊處理工具 所謂演算法,即特定計算模型下,旨在解決特定問題的指令序列 輸入 待處理的資訊(問題) 輸
#資料結構與演算法學習筆記#劍指Offer30:把陣列排成最小的數 + 自定義比較器 + 測試用例(Java、C/C++)
2018.10.6 1.求全排列最小。事實上用全排列硬剛這道題確實是最直接的辦法,因為乍一眼看上去實在不好歸納數字之間的順序關係,全排列具體實現原理可以參考上述文章。 2.自定義比較器。為什麼說
資料結構與演算法學習筆記之 複雜度分析
前言: 大家都知道資料結構和英語,就如同程式設計師的兩條腿一樣;只有不斷的積累,學習,擁有了健壯的“雙腿”才能越走越遠;在資料結構和演算法的領域,不得不承認自己就是一隻菜鳥;需要不斷的學習;在學習過程中,經常會有一些自己的看法,和別人獨特的見解;我都會一一做好筆記,以便進步; 正文:複雜度分析
資料結構與演算法學習筆記 4 (2018.10.08)
漸進分析:大o記號 回到原先的問題:隨著問題規模的增長,計算成本如何增長? 注意:這裡更關心足夠大的問題,注重考察成本的增長趨勢 漸進分析:在問題的規模足夠大後,計算成本如何成長? Asymptomatic analysis :當
資料結構與演算法學習筆記之 提高讀取效能的連結串列(上)
前言 連結串列(Linked list)比陣列稍微複雜一點,在我們生活中用到最常見的應該是快取,它是一種提高資料讀取效能的技術,常見的如cpu快取,瀏覽器快取,資料庫快取等。今天我們就來學習一下連結串列 正文 一、連結串列的定義? 1.一種線性表(資料排成像一條線一樣的結構。每個線性表上的資料最多
小白的資料結構與演算法學習筆記(二十六)----廣義表
一、廣義表的概述 首先回憶一下原子型別和結構型別,簡單說來,原子型別就是不可再分的型別,結構型別就是可以再分的型別。我們前面講的線性表要求每個元素都是原子型別,而廣義表作為線性表的推廣,它的元素可以是原子型別,也可以是個表。元素是原子型別,叫原子結點;元素是表,叫表結點。
資料結構與演算法學習筆記之先進先出的佇列
前言 佇列是一種非常實用的資料結構,類似於生活中發排隊,可應用於生活,開發中各個方面,比如共享印表機(先請求先列印),訊息佇列。你想知道他們是怎麼工作的麼。那就來一起學習一下佇列吧 正文 一、佇列的定義? 1.一種先進先出的線性表 2.只允許入棧 push()和出棧 pop() 在後端(稱
資料結構與演算法學習筆記之高效、簡潔的編碼技巧“遞迴”
前言 盜夢空間想象大多數人都看過:電影講述的是主人公諾蘭進入希裡安·墨菲夢境植入想法的行動。為了向希裡安·墨菲夢植入理念,影片進入四層夢境,即所謂:“夢中的夢中 夢中人的夢中”。 有一對兔子,每隔三個月會產下一對小兔子,小免子每隔三個月,也會產生新的一對免子,問36個月後,共有多少對兔子。 諸如此類:其
資料結構與演算法學習筆記之如何分析一個排序演算法?
前言 現在IT這塊找工作,不會幾個演算法都不好意思出門,排序演算法恰巧是其中最簡單的,我接觸的第一個演算法就是它,但是你知道怎麼分析一個排序演算法麼?有很多時間複雜度相同的排序演算法,在實際編碼中,那又如何選擇呢?下面我們帶著問題一起學習一下。 正文 一、常見經典的排序方法 (圖片來自於一畫素)
#資料結構與演算法學習筆記#劍指Offer34:兩個連結串列的第一個公共結點 + 等長遍歷/輔助棧 + 測試用例(Java、C/C++)
2018.10.21 這道題也是屬於效率題,實現難度不大,但是要降低複雜度還是需要思考一下。有兩個o(n)的做法: 方法一:等長連結串列法。先計算兩條連結串列的長度,然後先遍歷長連結串列直到兩條連結串列等長,最後依次按奇偶順序挨個遍歷兩條連結串列各個結點。 方法二:輔助
#資料結構與演算法學習筆記#劍指Offer35:數字在排序陣列中出現的次數 + 測試用例(Java、C/C++)
2018.10.24 今天是程式設計師節,但是程式設計師有啥節好過的,還是好好幹活吧~ 這道題也是一道效率題,根據實際情況的不同有兩個比較好用的方法: 方法一:平均複雜度o(n)。二分找到某一個K
資料結構與演算法學習筆記之 適合大規模的資料排序
前言 在資料排序的演算法中,不同資料規模應當使用合適的排序演算法才能達到最好的效果,如小規模的資料排序,可以使用氣泡排序、插入排序,選擇排序,他們的時間複雜度都為O(n2),大規模的資料排序就可以使用歸併排序和快速排序,時間複雜度為O(nlogn)。今天我們就來看一下歸併排序和快速排序。 正文
資料結構與演算法學習筆記之為用於高考名次排序的排序演算法
前言 在高考結束以後,所有人都在等著成績,政府部門面對幾百萬的資料,你知道他們是怎麼算名次的麼?上一次學到遞迴排序以及快排,確實,用他們可以實現,可是他們的時間複雜度最低都是O(nlogn)。今天我們來看看有沒有更快捷的排序方法? 正文 桶排序 原理: 將需要排序的資料分到幾個有序的
#資料結構與演算法學習筆記#劍指Offer35:是否平衡二叉樹/AVL樹 + 測試用例(Java、C/C++)
2018.11.3 前幾天有用遞迴實現了二叉樹的深度#資料結構與演算法學習筆記#劍指Offer36:二叉樹的深度(Java),因此可以對每個結點先序遍歷進行一次平衡驗證,只要確定每個結點都是平衡的
Java版資料結構與演算法學習筆記
概述 1. 什麼是資料結構 即資料在記憶體或磁碟上的組織形式,包括陣列、連結串列、棧、佇列、樹、hash表、圖、堆等。 2. 什麼是演算法 即對資料結構中的資料的處理方法,也可以說利用資料來解決業務問題的方法。 3. 資料結構與演算法的關係 資料結構是為演算法服務的。
資料結構與演算法學習筆記 (7)--順序佇列的實現
一、背景介紹 佇列概念:列是限制在兩端進行插入操作和刪除操作的線性表,允許進行存入操作的一端稱為“隊尾”,允許進行刪除操作的一端稱為“隊頭”。當線性表中沒有元素時,稱為“空隊”。 特點 :先進先出(FIFO)。 二、佇列的順序儲存結構 typedef int