原创 劍指offer 面試題54 二叉搜索樹的第K大節點

問題:給定一棵二叉搜索樹,請找出其中第k大的節點。 思路:中序遍歷 代碼: Recursion /* struct TreeNode { int val; struct TreeNode *left; struc

原创 劍指offer 面試題60 n個骰子的點數

問題:把n個骰子扔在地上,所有骰子朝上一面的點數之和爲s。輸入n,打印出s的所有可能的值出現的概率。(1 <= n <= 11) 思路1:遞歸 將n個骰子分爲1和n-1兩堆,n-1又可以進行遞歸,遞歸結束條件最後只剩下1個。 代碼: c

原创 劍指offer 面試題48 最長不含重複字符的子字符串

問題:請從字符串中找出一個最長的不包含重複字符的子字符串,計算該最長子字符串的長度。 輸入:字符串 輸出:最長子字符串的長度 思路:動態規劃 定義f(i)表示以第i個字符爲結尾的不包含重複字符的子字符串的最長長度。 如果第i個字符之前沒有

原创 劍指offer 面試題61 撲克牌中的順子

問題:從撲克牌中隨機抽5張牌,判斷是不是一個順子,即這5張牌是不是連續的。2~10爲數字本身,A爲1,J爲11,Q爲12,K爲13,而大、小王爲 0 ,可以看成任意數字。A 不能視爲 14。 思路1:排序 把數組排序,統計數組中0的個數,

原创 劍指offer 面試題41 數據流中的中位數

問題:如何得到一個數據流中的中位數?如果從數據流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從數據流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。 實現:我們使用Insert()方法讀取數據流

原创 劍指offer 面試題37 序列化二叉樹

問題:請實現兩個函數,分別用來序列化和反序列化二叉樹 二叉樹的序列化是指:把一棵二叉樹按照某種遍歷方式的結果以某種格式保存爲字符串,從而使得內存中建立起來的二叉樹可以持久保存。序列化可以基於先序、中序、後序、層序的二叉樹遍歷方式來進行修改

原创 劍指offer 面試題56 數組中數字出現的次數

問題1:數組中只出現一次的兩個數字 一個整型數組裏除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。 2 <= nums <= 10000 思路:異或 首先,對數組的每個數字依次進行異或,得到異或後的結果va

原创 劍指offer 面試題39 數組中出現次數超過一半的數字

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

原创 劍指offer 面試題43 1~n整數中1出現的次數

問題:輸入一個整數n,求1~n這n個整數的十進制表示中1出現的次數。 輸入:n 輸出:1出現的次數 思路: 將所有的數字分爲兩段,1~1345和1346~21345. 1、先處理1346~21345中1出現的次數。分爲:1在最高位的情況,

原创 劍指offer 面試題42 連續子數組的最大和

問題:輸入一個整數數組,既有正數,又有負數。數組中的一個或連續多個整數組成一個子數組。求所有子數組的和的最大值。 輸入:數組vector<int> array 輸出:和最大值 int 思路:貪心,從前向後遍歷數組,當子數組和小於0時,拋棄

原创 劍指offer 面試題55 二叉樹的深度

問題1:輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度爲樹的深度。 思路:遞歸 樹的深度爲左子樹的深度和右子樹的深度的較大值+1. 代碼: /* struct TreeNod

原创 leetcode[300] Longest Increasing Subsequence

題目:給定一個無序的整數數組,找到其中最長上升子序列的長度。 輸入:整數數組 輸出:最長上升子序列的長度 思路:動態規劃 爲了探究從較短的上升子序列到較長的上升子序列的關係,我們關注較短的上升子序列的結尾,因此,定義dp[i]爲以num[

原创 leetcode[151] 翻轉字符串裏的單詞

問題:給定一個字符串,逐個翻轉字符串中的每個單詞。 思路:先局部, 再整體。 第一遍,一邊去除掉多餘的空格,一邊局部翻轉單詞。 第二遍,整個句子翻轉一遍。 代碼: class Solution { public: string

原创 劍指offer 面試題62 圓圈中最後剩下的數字

問題:0,1,,n-1這n個數字排成一個圓圈,從數字0開始,每次從這個圓圈裏刪除第m個數字。求出這個圓圈裏剩下的最後一個數字。 例如,0、1、2、3、4這5個數字組成一個圓圈,從數字0開始每次刪除第3個數字,則刪除的前4個數字依次是2、0

原创 劍指offer 面試題58 翻轉字符串

問題1:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。爲簡單起見,標點符號和普通字母一樣處理。例如輸入字符串"I am a student. ",則輸出"student. a am I"。 思路:翻轉整個句子,然後翻轉每