原创 STL——vector

vector就是一個不定長數組。不僅如此,它把一些常用的操作“封裝”在了vectir類型內部。如a是一個vector,可以用如下操作a.size()a.push_back()a.pop_back()等等下面通過一個題目來簡單看一下vecto

原创 枚舉排列

生成1~n的排列我們嘗試用遞歸的思想解決:先輸出以1開頭的排列(這一步是遞歸調用),然後輸出以2開頭的排列(又是遞歸調用),接着是以3爲開頭的排列.....最後纔是以n開頭的排列。以1開頭的排列的特點是:第一位是1,後面是2~9的排列。根據

原创 DFS

圖描述的是一些個體之間的關係。與線性表之間和二叉樹之間不同的是,這些個體之間即不是前驅後繼的順序關係,也不是祖先後代的層次關係,而是錯綜複雜的網狀關係。在圖中一個比較重要的算法就是,小編接下來將要介紹的DFS算法。下面通過一個具體的例子來介

原创 生成可重集的排列

在上篇博文中介紹了,如何輸出1~n的全排列。在這篇博文裏,小編接着做出補充——生成可重集的排列。如果把上篇博文中的問題改成,輸入數組A,並輸出數組中各元素的全排列,則需要對上述程序做出修改。首先,我們需要把A加到函數的參列表裏。然後,把代碼

原创 STL——vector

vector就是一個不定長數組。不僅如此,它把一些常用的操作“封裝”在了vectir類型內部。如a是一個vector,可以用如下操作a.size()a.push_back()a.pop_back()等等下面通過一個題目來簡單看一下vecto

原创 生成可重集的排列

在上篇博文中介紹了,如何輸出1~n的全排列。在這篇博文裏,小編接着做出補充——生成可重集的排列。如果把上篇博文中的問題改成,輸入數組A,並輸出數組中各元素的全排列,則需要對上述程序做出修改。首先,我們需要把A加到函數的參列表裏。然後,把代碼

原创 算法設計與優化策略——滑動窗口

“滑動窗口”和上篇博客中介紹的“等價轉換”一樣也爲一種算法優化的思想。同樣,下面通過一個例子,來介紹這種思想。唯一的雪花(Unique snowflake,UVa 11572)輸入一個長度爲n(n<=10^6)的序列A,找到一個儘量長的連續

原创 算法優化策略之“中途相遇”算法思想

中途相遇法,這是一種特殊的算法,大體思路是從兩個不同的方向來解決問題,最終“彙集”到一起。“雙向廣度優先搜索”算法就有一點中途相遇的味道。下面我們通過一道具體的題目,來了解一下這種算法思想的應用。和爲0的4個值(4 Value Whose

原创 動態規劃——數字三角形

數字三角形問題。有一個由非負數組成的三角形,如圖所示。從第一行開始,每次可以往左下或者右下走一格,直到走到最下行,把沿途經過的數全部加起來,如何走才能使得這個和最大?我們最常規的想法:就是利用回溯發,將每一條路徑都遍歷一遍,然後選出最長的路

原创 枚舉排列

生成1~n的排列我們嘗試用遞歸的思想解決:先輸出以1開頭的排列(這一步是遞歸調用),然後輸出以2開頭的排列(又是遞歸調用),接着是以3爲開頭的排列.....最後纔是以n開頭的排列。以1開頭的排列的特點是:第一位是1,後面是2~9的排列。根據

原创 算法設計與優化之等價轉換

等價轉換與其說是一種算法的設計方法,更不說是一種算法思想。這種思想能有助於我們把複雜的問題簡單化,幫我們理清問題的思路,甚至能直接得出求解問題的方法。下面通過一道具體的題目來像讀者介紹這種思想。Gergovia酒的交易(Wine tradi

原创 c++標準庫裏的sort()排序函數

Sort()函數是c++一種排序方法之一,學會了這種方法也打消我學習c++以來使用的冒泡排序和選擇排序所帶來的執行效率不高的問題!因爲它使用的排序方法是類似於快排的方法,時間複雜度爲n*log2(n),執行效率較高!一,sort()排序函數