原创 順時針打印矩陣

題目描述 輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字,例如,如果輸入如下4 X 4矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,3,4,8,12,16,1

原创 300. 最長上升子序列

給定一個無序的整數數組,找到其中最長上升子序列的長度。 示例: 輸入: [10,9,2,5,3,7,101,18] 輸出: 4  解釋: 最長的上升子序列是 [2,3,7,101],它的長度是 4。 說明: 可能會有多種最長上升子序列的

原创 字符流中第一個不重複的字符

題目描述 請實現一個函數用來找出字符流中第一個只出現一次的字符。例如,當從字符流中只讀出前兩個字符"go"時,第一個只出現一次的字符是"g"。當從該字符流中讀出前六個字符“google"時,第一個只出現一次的字符是"l"。 輸出描述:

原创 包含min函數的棧

題目描述 定義棧的數據結構,請在該類型中實現一個能夠得到棧中所含最小元素的min函數(時間複雜度應爲O(1))。 解法: class Solution { public: stack<int> s; stack<in

原创 表示數值的字符串

題目描述 請實現一個函數用來判斷字符串是否表示數值(包括整數和小數)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示數值。 但是"12e","1a3.14","1.2.3","+-5"和"1

原创 二維數組中的查找

題目描述 在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。 解法: class Solu

原创 數組中出現次數超過一半的數字

題目描述 數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2}。由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。 解法: c

原创 字符串的排列

題目描述 輸入一個字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串abc,則打印出由字符a,b,c所能排列出來的所有字符串abc,acb,bac,bca,cab和cba。 輸入描述: 輸入一個字符串,長度不超過9(可能有

原创 從尾到頭打印鏈表

題目描述 輸入一個鏈表,按鏈表從尾到頭的順序返回一個ArrayList。 解法: /** * struct ListNode { * int val; * struct ListNode *next;

原创 《數據結構與算法》

序號 內容 1 排序算法概念 2 快速排序算法 3 堆排序算法 4 歸併排序算法                                                                  

原创 第一個只出現一次的字符

在一個字符串(0<=字符串長度<=10000,全部由字母組成)中找到第一個只出現一次的字符,並返回它的位置, 如果沒有則返回 -1(需要區分大小寫). 解法: class Solution { public: int Fir

原创 Observer觀察者模式

#include <iostream> #include <list> using namespace std; class Observer; class Subject { //抽象被觀察者 public: virtua

原创 一個C++程序執行main函數前和執行完main函數後會發生什麼。

總結:  main函數執行之前,主要就是初始化系統相關資源: 設置棧指針 初始化static靜態和global全局變量,即data段的內容 將未初始化部分的賦初值:數值型short,int,long等爲0,bool爲FALSE,指針爲N

原创 《設計模式》

設計模式目錄索引 觀察者模式 工廠模式 單例模式 策略模式

原创 86. 分隔鏈表

給定一個鏈表和一個特定值 x,對鏈表進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。 你應當保留兩個分區中每個節點的初始相對位置。 示例: 輸入: head = 1->4->3->2->5->2, x = 3 輸出: