国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)和算法筆記

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)和算法筆記。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

#include?<iostream>
#include?<vector>
#include?<stack>
#include?<deque>

using?namespace?std;

//?單調(diào)棧
vector<int>?nextGreaterElement(vector<int>&?nums)
{
????vector<int>?ans;
????stack<int>?s;
????for?(int?i?=?nums.size()?-?1;?i?>=?0;?i--)?{
????????while?(!s.empty()?&&?s.top()?<?nums[i])?{
????????????s.pop();
????????}
????????ans[i]?=?s.empty()???-1?:?s.top();
????????s.push(nums[i]);
????}
????return?ans;
}

//?單調(diào)隊(duì)列
class?MonotomicQueue{
????deque<int>?data;
public:
????void?push(int?n)?{
????????while?(!data.empty()?&&?data.back()?>?n)?{
????????????data.pop_back();
????????}
????????data.push_back(n);
????}
????void?pop(int?n)?{
????????if?(data.empty()?&&?data.front()?==?n)
????????????data.pop_front();
????}
????int?min()?{
????????return?data.front();?
????}
};

//?二叉堆(大根堆/小根堆)、優(yōu)先隊(duì)列
class?MaxPQ?{
????vector<int>?pq;
????int?N?=?0;??//?大根堆容量
????
????int?parent(int?root)?{
????????return?root?/?2;
????}
????int?left(int?root)?{
????????return?2?*?root;
????}
????int?right(int?root)?{
????????return?2?*?root?+?1;
????}
????
????bool?less(int?i,?int?j)?{
????????return?pq[i]?<?pq[j];
????}
????void?exch(int?i,?int?j)?{
????????swap(pq[i],?pq[j]);
????}
????//?上浮第k個(gè)節(jié)點(diǎn)
????void?swim(int?k)?{
????????while?(k?>?1?&&?less(parent(k),?k))?{
????????????exch(parent(k),?k);
????????????k?=?parent(k);
????????}
????}
????//?下沉第k個(gè)節(jié)點(diǎn)
????void?sink(int?k)?{
????????while?(left(k)?<=?N)?{
????????????//?默認(rèn)左子樹(shù)值較大
????????????int?older?=?left(k);
????????????//?如果右子樹(shù)存在,并且大于左子樹(shù),更新older
????????????if?(right(k)?<=?N?&&?less(older,?right(k)))?{
????????????????older?=?right(k);
????????????}
????????????//?節(jié)點(diǎn)k比兩個(gè)子孩子都大,就不必下沉了
????????????if?(less(older,?k))?break;
????????????exch(k,?older);
????????????k?=?older;
????????}
????}
????
public:
????void?insert(int?e)?{
????????N++;
????????pq[N]?=?e;
????????swim(N);
????}
????int?delMax()?{
????????int?max?=?pq[1];
????????//?交換棧頂和棧底最后一個(gè)節(jié)點(diǎn)
????????exch(1,?N);
????????N--;??//?刪除最有一個(gè)節(jié)點(diǎn)
????????sink(1);??//?下沉棧頂節(jié)點(diǎn)
????????return?max;
????}
????//?返回當(dāng)前隊(duì)列最大節(jié)點(diǎn)
????int?max()?{
????????return?pq[1];
????}
};

//?歸并排序
vector<int>?temp;
void?merge_sort(vector<int>&?nums,?int?l,?int?r)?{
????if?(l?>=?r)
????????return;
????
????int?mid?=?(r?+?l)?>>?1;
????merge_sort(nums,?l,?mid);?????????//?遞歸排列左半邊
????merge_sort(nums,?mid?+?1,?r);?????//?遞歸排列右半邊
????int?k?=?l,?p1?=?l,?p2?=?mid?+?1;??//?合并左右兩測(cè)
????while?((p1?<=?mid)?||?(p2?<=?r))?{
????????if?((p2?>?r)?||?(p1?<=?mid?&&?nums[p1]?<?nums[p2]))?{
????????????temp[k++]?=?nums[p1++];
????????}?else?{
????????????temp[k++]?=?nums[p2++];
????????}
????}
????for?(int?i?=?l;?i?<=?r;?i++)?nums[i]?=?temp[i];??//?將排序結(jié)果拷回原數(shù)組
}

//?二叉樹(shù)遍歷模板
typedef?struct?TreeNode?{
????int?val;
????TreeNode?*left;
????TreeNode?*right;
}?TreeNode;
//?思路:
//?1.遍歷
//?2.分解問(wèn)題
/************?遍歷?***********/
//?輔助外部變量
void?traverse(TreeNode?*root)?{
????if?(root?==?NULL)
????????return;
????
????/******?前序遍歷位置?******/
????traverse(root->left);
????/******?中序遍歷位置?******/
????traverse(root->right);
????/******?后續(xù)遍歷位置?******/
}
/************?分解問(wèn)題?***********/
//?函數(shù)定義:輸入以root為根的二叉樹(shù),返回這顆二叉樹(shù)的最大深度
int?MaxDepth(TreeNode?*root)?{
????if?(root?==?NULL)
????????return?0;
????/******?前序遍歷位置?******/
????int?ldep?=?MaxDepth(root->left);
????/******?中序遍歷位置?******/
????int?rdep?=?MaxDepth(root->right);
????/******?后序遍歷位置?******/
????return?max(ldep,?rdep)?+?1;
}

//?二叉搜索樹(shù)
//?特性:所有左子樹(shù)節(jié)點(diǎn)均小于根節(jié)點(diǎn),所有右子樹(shù)節(jié)點(diǎn)均大于根節(jié)點(diǎn)
int?searchBST(TreeNode?*root,?int?target)?{
????if?(root)
????????return?-1;
????
????if?(root->val?==?target)?{
????????return?root->val;
????}
????if?(root->val?<?target)?{
????????return?searchBST(root->right,?target);
????}
????if?(root->val?>?target)?{
????????return?searchBST(root->left,?target);
????}
????return?-1;
}

//?動(dòng)態(tài)規(guī)劃
//?1最優(yōu)解(最大或最小值)
//?2方案總數(shù)
//?3可行性
//?4最長(zhǎng)子數(shù)組
//?5最長(zhǎng)子序列
//?6背包系列問(wèn)題
//?7打家劫舍系列問(wèn)題
//?8股票交易系列問(wèn)題

//?二分算法模板
int?findTarget(vector<int>&?nums,?int?target)?{
????int?l?=?0,?r?=?nums.size()?-?1;
????while?(l?<=?r)?{
????????int?mid?=?l?+?(r?-?l)?/?2;
????????if?(nums[mid]?>?target)?{
????????????r?=?mid?-?1;
????????}?else?if?(nums[mid]?<?target)?{
????????????l?=?mid?+?1;
????????}?else?{
????????????return?nums[mid];
????????}
????}
????return?-1;
}

//?快速排序

//?并查集

//?字典樹(shù)

//?前綴和?樹(shù)狀數(shù)組文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-794434.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)和算法筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)和算法筆記1:滑動(dòng)窗口

    數(shù)據(jù)結(jié)構(gòu)和算法筆記1:滑動(dòng)窗口

    在一些數(shù)組或者字符串我們需要遍歷子序列,可能要用到兩個(gè)指針(我們稱(chēng)為起始指針和終止指 針)進(jìn)行雙層遍歷,內(nèi)層終止指針滿足條件時(shí)跳出內(nèi)層循環(huán),然后起始指針前進(jìn),回溯終止指針到起始指針,以此繼續(xù)進(jìn)行遍歷,然而這樣效率比較低,我們可能進(jìn)行了很多不必要

    2024年02月07日
    瀏覽(20)
  • 【學(xué)習(xí)筆記】數(shù)據(jù)結(jié)構(gòu)算法文檔(類(lèi)C語(yǔ)言)

    1.1.1 線性表的順序存儲(chǔ)表示 1.1.2 順序表中基本操作的實(shí)現(xiàn) 1.1.2.1 初始化 1.1.2.2 取值 1.1.2.3 查找 1.1.2.4 插入 1.1.2.5 刪除 1.1.2.6 計(jì)數(shù) 1.2.1 單鏈表的定義和表示 ★ 關(guān)于結(jié)點(diǎn) 1.2.2 單鏈表基本操作的實(shí)現(xiàn) 1.2.2.1 初始化 1.2.2.2 取值 1.2.2.3 查找 1.2.2.4 插入 1.2.2.5 刪除 1.2.2.6 前插法創(chuàng)建單

    2024年02月07日
    瀏覽(53)
  • 【王道考研】王道數(shù)據(jù)結(jié)構(gòu)與算法詳細(xì)筆記(全)

    【王道考研】王道數(shù)據(jù)結(jié)構(gòu)與算法詳細(xì)筆記(全)

    目錄 第一章 數(shù)據(jù)結(jié)構(gòu)緒論? 1.1 數(shù)據(jù)結(jié)構(gòu)的基本概念 1.2 數(shù)據(jù)結(jié)構(gòu)的三要素 1.2.1. 數(shù)據(jù)的邏輯結(jié)構(gòu) 1.2.2. 數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)(物理結(jié)構(gòu)) 1.2.3. 數(shù)據(jù)的運(yùn)算 1.2.4. 數(shù)據(jù)類(lèi)型和抽線數(shù)據(jù)類(lèi)型 1.3 算法的基本概念 1.4?算法的時(shí)間復(fù)雜度 1.5?算法的空間復(fù)雜度 第二章 線性表 2.1 線性表的定

    2024年02月08日
    瀏覽(29)
  • 讀書(shū)筆記-《數(shù)據(jù)結(jié)構(gòu)與算法》-摘要8[桶排序]

    讀書(shū)筆記-《數(shù)據(jù)結(jié)構(gòu)與算法》-摘要8[桶排序]

    桶排序和歸并排序有那么點(diǎn)點(diǎn)類(lèi)似,也使用了歸并的思想。大致步驟如下: 設(shè)置一個(gè)定量的數(shù)組當(dāng)作空桶。 Divide - 從待排序數(shù)組中取出元素,將元素按照一定的規(guī)則塞進(jìn)對(duì)應(yīng)的桶子去。 對(duì)每個(gè)非空桶進(jìn)行排序,通??稍谌厝胪皶r(shí)進(jìn)行插入排序。 Conquer - 從非空桶把元素

    2024年01月18日
    瀏覽(24)
  • 讀書(shū)筆記-《數(shù)據(jù)結(jié)構(gòu)與算法》-摘要4[插入排序]

    讀書(shū)筆記-《數(shù)據(jù)結(jié)構(gòu)與算法》-摘要4[插入排序]

    核心:通過(guò)構(gòu)建有序序列,對(duì)于未排序序列,在已排序序列中從后向前掃描(對(duì)于單向鏈表則只能從前往后遍歷),找到相應(yīng)位置并插入。實(shí)現(xiàn)上通常使用in-place排序(需用到O(1)的額外空間) 從第一個(gè)元素開(kāi)始,該元素可認(rèn)為已排序 取下一個(gè)元素,對(duì)已排序數(shù)組從后往前掃描 若從

    2024年02月04日
    瀏覽(20)
  • 【軟考程序員學(xué)習(xí)筆記】——數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)

    【軟考程序員學(xué)習(xí)筆記】——數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)

    目錄 ???一、數(shù)據(jù)結(jié)構(gòu)概念和分類(lèi) ??二、數(shù)組特點(diǎn)存儲(chǔ)方式 ??三、矩陣 特殊矩陣 非特殊矩陣 ??四、棧和隊(duì)列 ???五、二叉樹(shù)的性質(zhì) ??六、二叉樹(shù)的遍歷 (1)前序遍歷(先根遍歷,先序遍歷) (2)中遍歷(中根遍歷) (3)后序遍歷(后根遍歷,后序遍歷) ??七、二叉排序樹(shù) ??八、

    2024年02月12日
    瀏覽(24)
  • 【零基礎(chǔ)】學(xué)python數(shù)據(jù)結(jié)構(gòu)與算法筆記14-動(dòng)態(tài)規(guī)劃

    【零基礎(chǔ)】學(xué)python數(shù)據(jù)結(jié)構(gòu)與算法筆記14-動(dòng)態(tài)規(guī)劃

    學(xué)習(xí)python數(shù)據(jù)結(jié)構(gòu)與算法,學(xué)習(xí)常用的算法, b站學(xué)習(xí)鏈接 動(dòng)態(tài)規(guī)劃在基因測(cè)序、基因比對(duì)、hmm 有應(yīng)用場(chǎng)景。 從斐波那契數(shù)列看動(dòng)態(tài)規(guī)劃 練習(xí): 使用遞歸和非遞歸的方法來(lái)求解斐波那契數(shù)列。 這種非遞歸求斐波那契數(shù),可以看成是一個(gè)動(dòng)態(tài)規(guī)劃思想,每次都會(huì)把重復(fù)子問(wèn)

    2023年04月09日
    瀏覽(28)
  • 讀程序員的制勝技筆記02_算法與數(shù)據(jù)結(jié)構(gòu)

    讀程序員的制勝技筆記02_算法與數(shù)據(jù)結(jié)構(gòu)

    3.1.1.1.?根據(jù)你的需要,可以有更智能的算法 3.1.3.1.?算法本身并不意味著它很聰明 3.2.1.1.?public static bool Contains(int[] array, int lookFor) { for (int n = 0; n < array.Length; n++) { ???????if (array[n] == lookFor) { ???????????return true; ???????} ???} ???return false; } 3.3.1.1.?public sta

    2024年02月06日
    瀏覽(43)
  • 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)筆記——圖的遍歷算法(深度優(yōu)先搜索和廣度優(yōu)先搜索)

    數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)筆記——圖的遍歷算法(深度優(yōu)先搜索和廣度優(yōu)先搜索)

    圖的遍歷指從圖中某一頂點(diǎn)出發(fā)(任意一個(gè)頂點(diǎn)都可以作為訪問(wèn)的起始頂點(diǎn)),按照某種遍歷方法,對(duì)圖中所有的頂點(diǎn)訪問(wèn)一次且只訪問(wèn)一次。圖與樹(shù)不一樣,其中一個(gè)頂點(diǎn)可能與多個(gè)頂點(diǎn)相連,所以需記錄已訪問(wèn)過(guò)的頂點(diǎn),當(dāng)訪問(wèn)一個(gè)頂點(diǎn)后,考慮如何選取下一個(gè)要訪問(wèn)的

    2024年02月05日
    瀏覽(39)
  • 數(shù)據(jù)結(jié)構(gòu)與算法之美學(xué)習(xí)筆記:48 | B+樹(shù):MySQL數(shù)據(jù)庫(kù)索引是如何實(shí)現(xiàn)的?

    數(shù)據(jù)結(jié)構(gòu)與算法之美學(xué)習(xí)筆記:48 | B+樹(shù):MySQL數(shù)據(jù)庫(kù)索引是如何實(shí)現(xiàn)的?

    本節(jié)課程思維導(dǎo)圖: 作為一個(gè)軟件開(kāi)發(fā)工程師,你對(duì)數(shù)據(jù)庫(kù)肯定再熟悉不過(guò)了。作為主流的數(shù)據(jù)存儲(chǔ)系統(tǒng),它在我們的業(yè)務(wù)開(kāi)發(fā)中,有著舉足輕重的地位。在工作中,為了加速數(shù)據(jù)庫(kù)中數(shù)據(jù)的查找速度,我們常用的處理思路是,對(duì)表中數(shù)據(jù)創(chuàng)建索引。那你是否思考過(guò),數(shù)據(jù)庫(kù)

    2024年01月16日
    瀏覽(98)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包