原创 二叉樹的遍歷(遞歸加迭代)

先定義結點的結構如下: //二叉樹結點 typedef struct BiTNode{ //數據 char data; //左右孩子指針 struct BiTNode *lchild,*rchild; }BiTNode,*BiT

原创 等概率隨機生成不重複的數

#include <iostream> #include <cstdlib> #include <ctime> 一、1到n n個數字隨機全排序,或者說,隨機生成1到n n個不重複的數字 用空間換時間,需要空間複雜度爲o(n),時間複雜度

原创 什麼是P問題、NP問題和NPC問題

    你會經常看到網上出現“這怎麼做,這不是NP問題嗎”、“這個只有搜了,這已經被證明是NP問題了”之類的話。你要知道,大多數人此時所說的NP問題其實都是指的NPC問題。他們沒有搞清楚NP問題和NPC問題的概念。NP問題並不是那種“只有

原创 矩形覆蓋

題目描述: 我們可以用2*1的小矩形橫着或者豎着去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法? 分析:

原创 【後綴數組系列】一、基本概念

如果你沒有聽說過後綴數組,那麼我敢肯定,你確實沒怎麼處理過字符串相關的算法問題。 ————題記 對於解決字符串相關的問題,後綴數組是一把利器。它經常被用來解決字符串相關的各種複雜問題。下面開始介紹後綴數組。 後綴數組 int SA[N]

原创 linux下配置Qt5 開發環境

第一步很簡單,就是從官網下載安裝包或者下載源碼自己編譯,直接下載.run安裝包進行安裝。從官網http://download.qt.io/official_releases/qt/5.5/5.5.1/qt-opensource-linux

原创 【編程之法習題】第一章 字符串

在 點贊 收藏 分享 文章舉報

原创 說說std::endl函數

一旦講到這個函數,就要涉及到輸入輸出流。展示 基本輸入輸出類的繼承結構  的最簡明的方法就是用圖片,先來看兩張圖片: 好,下面進入正題。 先來看一下std::endl這個模板函數的本來面目,即它的聲明: template <cla

原创 【leetcode】5.Longest Palindromic Substring >>Manacher算法

求指定字符串的最長迴文子串。 給定 std::string s,採用manacher算法,在O(n)時間內,在O(n)空間下,解決該問題。 字符串包括奇數長的和偶數長,同時其中所含的迴文串也分奇數長和偶數長,如果分情況討論的話,比較複雜。

原创 【leetcode】3. Longest Substring Without Repeating Characters 三種方法

查找給定字符串的最長不重複子串。 方法一 該方法很直接,依次從每一個字符開始,向後逐個遍歷,直到遇到重複的字符爲止。判斷字符是否重複,用到了hash數組,可以在常數時間內判斷當前字符在本次循環中是否訪問過,由於針對的是ASCII字符集,故

原创 最長公共子序列LCS 與最長公共子串 兩個問題的動態規化 解法

一、最長公共子序列 最長公共子序列的問題常用於解決字符串的相似度。 最長公共子序列全稱爲Longest Common Sequence,LCS,注意與最長公共子串的區別。序列可以不連續,子串一定是連續的。 下面我們先討論子序列(不連續)。

原创 跳臺階問題 + 變態跳臺階問題 解法(動態規劃遞歸 + 非遞歸)

一、跳臺階問題 題目描述: 一個臺階總共有n級,如果一次可以跳1級,也可以跳2級。求總共有多少總跳法,並分析算法的時間複雜度。 通過題目的描述,可以很清晰地看到,這就是一個Fibonacci數列。 遞歸實現: unsigned long

原创 摺紙問題 C++實現

題目描述: 把紙條豎着放在桌面上,然後從紙條的下邊向上對摺,壓出摺痕後再展開。如果每次都從下邊向上對摺,對摺N次。 我們規定,對於每條摺痕,如果突起的方向指向紙條的背面,那麼這條摺痕叫做“下”摺痕 ;相反,突起的方向指向紙條正面的摺痕叫做

原创 旋轉打印矩陣、旋轉存儲矩陣、之字形打印矩陣

題目:輸入一個矩陣,按照從外向裏以順時針順序依次打印出每一個數字。例如:如果輸入如下矩陣: 1      2    3     4 5      6

原创 【後綴數組系列】二、後綴數組的兩種求法

如果直接求後綴數組的話,那就是給N個字符串進行從小到大的排序比較,需要的時間複雜度爲O(n2)。複雜度太高了。由第一篇文章可知,名次數組和後綴數組互爲逆運算,只要 求出名次數組,就可以在O(n)的時間內求出後綴數組。所以接下來介紹的兩種