原创 Java vs c++ 字符串 vector ArrayList 迭代器數組比較

字符串 Java 和 c++ 都支持字符串,但在使用方面有所區別。 初始化,Java 的初始化方式比較簡樸,= 後加上字符串即可。c++ 可以在變量後,使用括號進行多次重複或者進行賦值。除此之外,Java 可以兩個字面量進行直接

原创 3. 希爾算法

思想 希爾算法,是間隔對數組抽樣,從而形成多個子數組。在這多個子數組中,保證其排序正確性。 然後對抽樣間隔逐漸變小,再次保證其排序。 對於這些抽樣出來的子數組,應該如何排序呢?這裏用到插入排序。(選擇排序因爲需要每次遍歷,所以對於

原创 9. 桶排序

思想 桶排序,也是爲了解決計數排序計數數組大小設置的問題。桶排序,就是把待排序數據分爲不同的區間,然後區間內進行排序,最後即可完成排序。 就有點像,成績會有一個區間,比如100-90, 90-80這樣,每個區間就是一個桶,然後對桶

原创 2. 數組

2.1 數組的結構 數組,是一塊連續的內存區域,且具有相同類型的數據結構。 說回上一次的圖。(圖片修改自極客專欄:《數據結構與算法之美》) 這就是數組的一塊內存區域。 我們提下上面說的兩個特點: 連續內存區域 相同的數據類型

原创 10. 排序算法思想概述及總結(精華)

排序算法的常用種類 初級排序 選擇排序 插入排序 希爾排序 進階排序 快速排序 歸併排序 (二叉堆排序)堆排序 非比較排序 計數排序 基數排序 桶排序 逆序對 逆序對,是分析排序算法的一個重要知識點。既然

原创 PyTorch深度學習快速入門教程(絕對通俗易懂!)

Pytorch教程使用指南及目錄 相信嘗試找到此教程的你,已經知道 PyTorch 的用途。 找到此教程的你,也許跟我一樣,嘗試過各種教程,官方的教程文檔,各色的視頻,但發現都不是很友好。 深知此感受的我,嘗試寫下這份教程,希望能

原创 內存訪問全過程

這一篇,是重點!我們將去講解操作系統根據代碼(邏輯)地址去訪問真實物理地址的全過程。 將把全面幾節的東西全部用上,並完全梳理,完善細節。 前面講了分段、分頁機制,他們都可以實現,從虛擬地址(地址空間)向物理地址的轉換。但是,實際使

原创 多級頁表與快表

之前頁表結構的不足 之前的頁表結構看起來挺好的呀,有什麼問題呢? 如果每個頁的大小是4k,也就是2的12次方。如果是32位的地址話,也就是說,有2的20次方個頁。 那麼對應到頁表,也就說頁表應該有2的20次方個項。因爲每個項表示

原创 動態規劃專題:LeetCode連續數列

LeetCode題目鏈接 面試題 16.17. 連續數列 這個題目和最大子數列是一個題目 思路 用 dp[i] 表示,連續數列的和。 當 dp[i-1] 小於0的時候,它如果加上nums[i]的話,肯定比單獨的nums[i]小。此

原创 動態規劃專題:LeetCode 按摩師

LeetCode題目 面試題 17.16. 按摩師 思路 爲什麼要用動態規劃 在知道如何使用動態規劃前,知道何時使用動態規劃最重要吧。 如果你要知道最後一天的值,取決於第三天做不做,這就是二叉樹的結構,一般涉及到兩個選擇的,畫

原创 動態規劃專題:LeetCode 乘積最大子數組

原題鏈接 乘積最大子數組 思路 刷題得按專題刷,發現這道題很有意思。 因爲負數的引入,導致推導狀態就比較麻煩。看了題解,分別記錄最大值和最小值。當遇到負數的時候,最大值將會變爲最小,最小將會變爲最大。真的很巧妙。算是開拓了一個新的

原创 1. 數據結構概述

1.1 什麼是數據結構 說到數據結構,我覺得可以拆分成兩個詞,數據和結構。 先來打個比方。 同樣是水, 有的被放進了游泳池,成爲了游泳嬉戲的場所; 有的被放進了杯子,供我們喝水; 我們不可能喝水,不用杯子,用游泳池。 說到底,就四

原创 動態規劃專題:LeetCode 完全平方數

原題鏈接 279. 完全平方數 思路 這道題跟之前的動態規劃有些區別。刷了不少動態規劃的題目。大部分的結構,都是類似於這種形式 dp[i] = Math.max(min)(dp[i-n]+k, dp[i-m]+k1) + M 這

原创 5. 堆排序

思想 維護一種數據結構,它可以完成下面兩個功能:插入數據;取出最小數據。 因爲數組和鏈表均不能均衡這兩個功能的時間複雜度。於是採用完全二叉樹來實現這兩種功能。 小堆,每個節點值都小於其子節點的值。 其實,就有點像排行榜的感覺,當有

原创 7. 計數排序

思想 計數排序,不再依賴元素的比較,而是通過計數的方式,來進行排序。 比如,你知道成績比你高的有5個人,那麼你是多少名呢?計數排序就是採用這種思想。 計數排序,爲每一個元素設置一個計數,然後進行計數排序。 從這個思想上來看,計數排