原创 面試 扔雞蛋問題

題目描述: 兩個軟硬程度一樣但未知的雞蛋,它們有可能都在一樓就摔碎,也可能從一百層樓摔下來沒事。有座100層的建築,要你用這兩個雞蛋確定哪一層是雞蛋可以安全落下的最高位置,並且試探次數最少。 這是動態一個動態規劃問題,題目要求是1

原创 二叉樹的幾種遍歷方法(BFS,DFS)

二叉樹的遍歷應該是一個基本操作,有很多相關的題目,這篇文章就用幾種不同的方法來實現遍歷整個遍歷過程。 先定義一下二叉樹的節點: struct TreeNode { * int val; * TreeNode *

原创 Leetcode 560和爲K的子數組

題目 方法一: 構造一個前綴和數組,然後在兩重循環暴力搜索所有的可能;時間複雜度O(n^2);最後一個測試用例無法通過。 class Solution { public: int subarraySum(vector<in

原创 STL中next_permutation()和prev_permutation()函數實現

next_permutation()和permutation()是STL提供的用來計算下一個排列和上一個排列的算法;刷題中經常用到,比較有用。 next_permutation()實現: template <class itera

原创 leach

xm=100;%設置區域爲100*100 ym=100; sink.x=0.5*xm;%sink(匯聚)節點座標 sink.y=1.75*ym; n=100 %區域內的節點數目 p=0.05;% 節點成爲簇頭的概率 Eo=0

原创 多源BFS

多源bfs方法可以解決leetcode 上的一類題, 一般來說我們使用BFS都是單源的,如二叉樹層次遍歷等leetcode 上的很多題目,我們起始階段只需要將某一個元素加入隊列。 多源顧名思義就是開始階段加入多個元素入隊列,我們也

原创 matlab上實現Dijkstra算法找兩點最短路徑代碼

Dijkstra算法就不多解釋了,這個代碼我是在論文實驗裏用到了,主要是用來找兩個路由節點之間的最短路徑。 代碼寫的比較隨意。。。 function [ans] = djk(adj,start,des) %% adj 所有節點構成

原创 數據流的中位數

方法一: 雙堆法(最大堆+最小堆) 當前兩個堆中數據個數爲偶數時: 如果新插入數據小於或等於大堆的堆頂,則說明新數據應該插入大堆;此時我們先將大堆堆頂插入小堆中,然後再將新數據插入大堆。 **否則**直接將新數據插入小堆。

原创 shared_ptr循環引用

簡單的測試一下出現循環引用的情況,這會導致程序內泄露。 #include <iostream> class child; class parent { public: shared_ptr<child>p

原创 LeetCode滑動窗口

之前刷了不少和滑動窗口相關的題目,但是一直沒有好好地去總結,最近剛好看到LeetCode上一位大佬labuladong寫的一篇滑動窗口的模板,覺得很有意義。下面結合我自己的理解重新的總結和歸納一下,部分內容參考labuladong

原创 並查集

最近刷題瞭解到了並查集這種數據結構,特意去學習了一下,並查集的寫法大概有幾種,但是關鍵點只有如下兩點: 1.合併的方式(按高度或者按節點數); 2.路徑壓縮 寫了幾個模板 1.按高度合併同時進行路徑壓縮 class Union {

原创 任務調度器算法(leetcode621)

題目描述如下: 思路: 要想完成任務的時間最短,那麼必須優先處理出現次數最多的任務(如果將次數多的任務留到最後,必然在每次任務之間留出大量的等待時間),因此我們可以以n+1個任務爲一輪(保證同一種任務不出現在同一輪),每一輪按出

原创 ubuntu 軟件安裝

DEB 包 dpkg -i package.deb 安裝/更新一個 deb 包 dpkg -r package_name 從系統刪除一個 deb 包 dpkg -l 顯示系統中所有已經安裝的 deb 包 dpkg -l | gre

原创 二叉樹的遍歷與重建

前面文章已講到了二叉樹的幾種典型的遍歷方式: 主要分爲兩大類 1. 深度優先(DFS):前序遍歷,中序遍歷,後序遍歷 2. 寬度優先(BFS) 這幾種遍歷的具體實現前面的文章已經實現過了,這篇文章重點分析如何根據已有的前序遍歷和中