原创 劍指offer-把字符串轉換成整數 -- Java實現

題目 將一個字符串轉換成一個整數,要求不能使用字符串轉換整數的庫函數。 數值爲0或者字符串不是一個合法的數值則返回0 分析 思路一: 思路見註釋,注意需要判斷越界情況 代碼: public class Solution {

原创 劍指offer-表示數值的字符串 -- Java實現

題目 分析 思路一: 代碼: public class Solution { public boolean isNumeric(char[] str) { boolean sign = false, de

原创 劍指offer-求1+2+3+...+n -- Java實現

題目 分析 思路一: 1.需利用邏輯與的短路特性實現遞歸終止。 2.當n==1時,(n > 1) && ((sum = Sum_Solution(n - 1) + n) > 0)只執行前面的判斷,爲false,然後直接返回1;

原创 劍指offer-字符流中第一個不重複的字符 -- Java實現

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

原创 劍指offer-數組中重複的數字 -- Java實現

題目 在一個長度爲n的數組裏的所有數字都在0到n-1的範圍內。 數組中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出數組中任意一個重複的數字。 例如,如果輸入長度爲7的數組{2,3,1,0,2,5,

原创 劍指offer-數據流中的中位數 -- Java實現

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

原创 劍指offer-46-孩子們的遊戲-圓圈中最後剩下的數(約瑟夫環) -- Java實現

題目 每年六一兒童節,牛客都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。HF作爲牛客的資深元老,自然也準備了一些小遊戲。其中,有個遊戲是這樣的:首先,讓小朋友們圍成一個大圈。然後,他隨機指定一個數m,讓編號爲0的小朋友開始

原创 劍指offer-順時針打印矩陣 -- Java實現

題目 輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字,例如,如果輸入如下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,

原创 劍指offer-51-構建乘積數組 -- Java實現

題目 分析 思路一: 暴力,O(N^2) 代碼: import java.util.ArrayList; public class Solution { public int[] multiply(int[] A) {

原创 劍指offer-32-把數組排成最小的數 -- Java實現

題目 輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字爲321323。 分析 思路一: 應用字符串全排列的思路,找出所

原创 劍指offer-41-和爲S的連續正數序列(滑動窗口思想) -- Java實現

題目 小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和爲100(至少包括兩個數)。沒多久,他就得到另一組連續正數和爲100的序

原创 劍指offer-43-左旋轉字符串(矩陣翻轉) -- Java實現

題目 彙編語言中有一種移位指令叫做循環左移(ROL),現在有個簡單的任務,就是用字符串模擬這個指令的運算結果。對於一個給定的字符序列S,請你把其循環左移K位後的序列輸出。例如,字符序列S=”abcXYZdef”,要求輸出循環左移3

原创 劍指offer-28-數組中出現次數超過一半的數字 -- Java實現

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

原创 劍指offer-13-調整數組順序使奇數位於偶數前面 -- Java實現

題目 輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位於數組的前半部分,所有的偶數位於數組的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。 分析 思路一: 利用輔助數組,以空間換時間 代碼: p

原创 劍指offer-42-和爲S的兩個數字(雙指針思想) -- Java實現

題目 輸入一個遞增排序的數組和一個數字S,在數組中查找兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。 分析 思路一: 數列滿足遞增,設兩個頭尾兩個指針i和j, 若ai + aj == sum,就是