劍指offer(Java版)

劍指Offer面試題6(Java版):重建二叉樹

題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重新構造出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中不包含重複的數字。例如輸入的前序遍歷序列為{1,2,4,7,3,5,6,8}和中序遍歷為{4,7,2,1,5,3,6,8},則重建出二叉樹並輸出它的頭結點。 在二叉樹的前序遍歷序列中,第一個數字總 […]

劍指Offer面試題33(java版):把陣列排成最小的數

題目:輸入一個正整數陣列,把陣列裡面所有的數字拼接排成一個數,列印能拼接出的所有數字中的一個。例如輸入陣列{3,32,321},則列印出這3個數字能排成的最小數字321323. 這個題目最直接的做法應該是先求出這個陣列中的所有數字的全排列,然後把每個排列拼接起來,最後求出排列起來的數字的最小值。求陣 […]

劍指Offer面試題4(Java版),替換空格

題目:請實現一個函式,把字串中的每個空格替換成“%20”。例如輸入“We are happy”,則輸出”We%20are%20happy”. 原因:在網路程式設計中,如果URL引數中含有特殊字元,如:空格、“#”等,可能導致伺服器端無法獲得正確的引數值。我們需要將這些特殊符號 […]

劍指Offer面試題47(Java版):不用加減乘除做加法

題目:寫一個函式,求兩個整數之和,要求在函式體內不得適用 ,-,* ,./  四則運算子號 面試的時候被問道這個問題,首先我們分析人們是如何進行十進位制的加法的,比如是如何得出5 17=22的結果的,實際上,我們可以分三步進行:第一步只做各位相加不進位,此時相加的結果是12,第二步做進位,5 7中有 […]

劍指Offer面試題8(java版):旋轉陣列的最小數字

題目: 把一個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為旋轉。 輸入一個遞增的排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。  例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小元素為1. 這道題最直觀的解法並不難,從頭到尾遍歷一次,我們就能找到最小的元素。這種思路 […]

劍指offer面試題14(Java版):調整陣列順序使奇數位於偶數的前面

題目:輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有奇數位於陣列的前半部分,所有偶數位於陣列的後半部分。 1、基本實現: 如果不考慮時間複雜度,最簡單的思路應該是從頭掃描這個陣列,每碰到一個偶數時,拿出這個數字,並把位於這個數字後面的所有的數字往前面挪動一位。挪完之後在陣列的末尾有 […]

劍指Offer面試題24(Java版):二叉搜尋樹的後序遍歷序列

題目:輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回true,否則返回false。假設輸入的陣列的任意兩個數字都互不相同。 例如輸入陣列{5,7,6,9,11,10,8}則返回true,因為這個整數序列是下圖二叉樹的後序遍歷的結果。如果輸入的陣列是{7,4,6,5},由 […]

劍指Offer面試題29(java版):陣列中出現次數超過一半的數字

題目:陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現5次,超過陣列長度的一半,因此輸出2. 解法一:基於Partition函式的O(n)演算法: 我們的演算法是受快速排序的演算法的啟發。在隨機快速 […]

劍指Offer面試題22(Java版):棧的壓入、彈出序列

題目:輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。 假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓棧序列,序列,4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。 解決這個問題很直觀的想法 […]