1. 程式人生 > >《劍指Offer》題四十一~題五十

《劍指Offer》題四十一~題五十

實現 個數字 習慣 轉換 因子 移動 一個數 如果 加減乘

四十一、數據流中的中位數

題目:如何得到一個數據流中的中位數?如果從數據流中讀出奇數個數值,那麽中位數就是所有數值排序之後位於中間的數值。如果從數據流中讀出偶數個數值,那麽中位數就是所有數值排序之後中間兩個數的平均值。

四十二、連續子數組的最大和

題目:輸入一個整型數組,數組裏有正數也有負數。數組中的一個或連續多個整數組成一個子數組。求所有子數組的和的最大值。要求時間復雜度為O(n)。

四十三、1~n整數中1出現的次數

題目:輸入一個整數n,求1~n這n個整數的十進制表示中1出現的次數。例如,輸入12,1~12這些整數中包含1的數字有1、10、11和12,1一共出現了5次。

四十四、數字序列中某一位的數字

題目:數字以0123456789101112131415…的格式序列化到一個字符序列中。在這個序列中,第5位(從0開始計數)是5,第13位是1,第19位是4,等等。請寫一個函數,求任意第n位對應的數字。

四十五、把數組排成最小的數

題目:輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的那個。例如,輸入數組{3, 32, 321},則打印出這3個數字能排成的最小數字321323。

四十六、把數字翻譯成字符串

題目:給定一個數字,我們按照如下規則把它翻譯為字符串:0翻譯成"a",1翻譯成"b",……,11翻譯成"l",……,25翻譯成"z"。一個數字可能有多個翻譯。例如,12258有5種不同的翻譯,分別是"bccfi"、"bwfi"、"bczi"、"mcfi"和"mzi"。請編程實現一個函數,用來計算一個數字有多少種不同的翻譯方法。

四十七、禮物的最大值

題目:在一個mxn的棋盤的每一格都放有一個禮物,每個禮物都有一定的價值(價值大於0)。你可以從棋盤的左上角開始拿格子裏的禮物,並每次向左或者向下移動一格,直到到達棋盤的右下角。給定一個棋盤及其上面的禮物,請計算你最多能拿到多少價值的禮物?

四十八、最長不含重復字符的子字符串

題目:請從字符串中找出一個最長的不包含重復字符的子字符串,計算該最長子字符串的長度。假設字符串中只包含‘a‘~‘z‘的字符。例如,在字符串"arabcacfr"中,最長的不含重復字符的子字符串是"acfr",長度為4。

四十九、醜數

題目:我們把只包含因子2、3和5的數稱作醜數。求按從小到大的順序的第1500個醜數。例如,6、8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當作第一個醜數。

五十、第一個只出現一次的字符

題目一:字符串中第一個只出現一次的字符。在字符串中找出第一個只出現一次的字符。如輸入"abaccdeff",則輸出‘b‘。

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

五十一、數組中的逆序對

題目:在數組中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個數組中的逆序對的總數。例如,在數組{7, 5, 6, 4}中,一共存在5個逆序對,分別是(7, 6)、(7, 5)、(7, 4)、(6, 4)和(5, 4)。

五十二、兩個鏈表的第一個公共節點

題目:輸入兩個鏈表,找出它們的第一個公共節點。

五十三、在排序數組中查找數字

五十四、二叉搜索樹的第K大節點

五十五、二叉樹的深度

五十六、數組中數字出現的次數

五十七、和為S的數字

五十八、翻轉字符串

五十九、隊列的最大值

六十、n個骰子的點數

六十一、撲克牌中的順子

六十二、圓圈中最後剩下的數字

六十三、股票的最大利潤

六十四、求1+2+…+n

六十五、不用加減乘除做加法

六十六、構建乘積數組

六十七、把字符串轉換成整數

六十八、樹中兩個節點的最低公共祖先

《劍指Offer》題四十一~題五十