原创 雙隊列·

維護一個平衡二叉樹#include <stdio.h> #include <iostream> #include <stack> #include <string> #include <set> using namespace std;

原创 類和對象的基本概念

結構化程序數據結構 + 算法不足之處:1. 結構化程序設計中,函數和其所操作的數據結構沒有直觀的聯繫。2.隨着程序規模的增加,程序逐漸難以理解,很難一下子看出來。例如:①某個數據結構到底有哪些函數可以對它進行操作。②某個函數到底用來操作哪

原创 類和對象的基本概念二

1.類的成員函數的函數體和類的定義分開來寫。寫法:函數類型  類名::函數名{函數體}表明後面的函數是類的成員函數而非普通函數。那麼,一定要通過對象或對象的指針或對象的引用才能調用。2.類成員的可訪問範圍範圍訪問關鍵字:①private:

原创 貪心 Rainbow的商店

貪心策略是把商品按價值從大到小排序,價值相同的過期日期大的在前面,設置一個標誌數組visited,從過期日期向前依次安排賣的日期#include <stdio.h> #include <iostream> #include <stack>

原创 解碼方法 leetcode

類似於爬樓梯string s; using namespace std; class Solution { public: int numDecodings(string s) { if( s.empty(

原创 leetcode 不同路徑Ⅱ

動態規劃(深搜會超時)class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {

原创 內聯函數 和 重載函數 和 缺省函數

內聯函數目的:函數調用是有時間開銷的(參數入棧、函數地址入棧)。如果函數本身只有幾條語句,執行非常快·,而且函數會被反覆執行很多次,相比之下,調用函數的開銷會顯得特別大。機理:引入了內聯函數機制,編譯器處理對內聯函數的調用語句時,是將整個

原创 leetcode 使用最小花費爬樓梯

狀態:dp[i]表示到達第i個階梯需要的最小花費,小技巧是令cost[n] = 0 ,最後返回dp[n]即可狀態轉移方程:dp[i] = min( dp[i-2], dp[i-1] ) + cost[i];#include <vector

原创 派生類的構造函數和析構函數

前言:在設計派生類的構造函數時,希望執行派生類的構造函數時,使派生類的數據成員和基類的數據成員同時被初始化。解決這個問題的思路是:在執行派生類的構造函數時,調用基類的構造函數。5.1簡單的派生類的構造函數派生類構造函數一般形式爲派生類構造

原创 leetcode 乘積最大子序列

由於乘積時會負負得正,所以需要記錄一個正的最大值和一個負的最小值。狀態Posdp[i]:表示以第i個元素爲結尾的子序列的最大乘積狀態Negdp[i]: 表示第i個元素爲結尾的子序列的最小乘積狀態轉移方程: Posdp[

原创 種類並查集 A Bug's Life

跟發現它抓住它完全一樣。注意:當發現同性戀時不能直接break,因爲還有輸入數據#include <stdio.h> #include <iostream> #include <stack> #include <string> #incl

原创 leetcode 買賣股票的最佳時機Ⅱ

因爲可以進行多次買賣,這是一個貪心問題,只要當天股票價格比前一天股票價格上漲,便賣出#include <vector> using namespace std; class Solution { public: int maxPr

原创 種類並查集 發現它 抓住它

tag[i] 表示 i 結點 與其父節點是否在同一個集合中(表示的是一種相對關係)GetFather時:壓縮路徑,同時更新tag[i]合併時:更新tag[father[i]]#include <stdio.h> #include <ios

原创 類的繼承與派生(一)

繼承性是面向對象設計的最重要特徵,實現了軟件的可重用性。1.繼承與派生的概念在c++中,所謂繼承就是在一個已存在的類的基礎上建立一個新的類。已存在的類稱爲基類或父類,新建立的類稱爲派生類或者子類。一個新類從已有的類那裏獲得其已有的特性,這

原创 種類並查集 食物鏈

#include <stdio.h> #include <iostream> #include <stack> #include <string> #include <set> #include <memory.h> #include <