原创 劍指Offer_46_孩子們的遊戲(圓圈中最後剩下的數)

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

原创 劍指Offer_34_找出字符串中第一個只出現一次的字符

題目描述 找出字符串中第一個只出現一次的字符 詳細描述: 接口說明 原型: bool FindChar(char* pInputString, char* pChar); 輸入參數: char* pInputString:字符串

原创 劍指Offer_42_和爲S的兩個數字

題目描述 輸入一個遞增排序的數組和一個數字S,在數組中查找兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。  輸出描述: 對應每個測試案例,輸出兩個數,小的先輸出。 解題思路 利用兩個指針分別指數組

原创 劍指Offer_35_數組中的逆序對

題目描述 在數組中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個數組中的逆序對的總數P。並將P對1000000007取模的結果輸出。 即輸出P%1000000007  輸入描述:

原创 劍指Offer_33_醜數

題目描述 把只包含因子2、3和5的數稱作醜數(Ugly Number)。例如6、8都是醜數,但14不是,因爲它包含因子7。 習慣上我們把1當做是第一個醜數。求按從小到大的順序的第N個醜數。 解題思路 定義一個數組,保存已經得到的醜

原创 劍指Offer_32_把數組排成最小的數

題目描述 輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字爲321323。 解題思路 解法1 使用全排列方式,將所

原创 劍指Offer_41_和爲S的連續正數序列

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

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

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

原创 劍指Offer_39_平衡二叉樹

題目描述 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。 解題思路 遞歸判斷子樹是否是平衡二叉樹,每次還需要返回子樹的高度用以判斷當前樹是否是平衡的。 實現 public class Solution { private

原创 劍指Offer_37_數字在排序數組中出現的次數

題目描述 統計一個數字在排序數組中出現的次數。 解題思路 解法1 遍歷數組,比較給定值和數組中元素的值。 二分查找 我們需要找到第一個和最後一個k,如果中間值大於給定值k,那麼k在前半段,小於k則在後半段。相等,則判斷前面的

原创 劍指Offer_43_左旋轉字符串

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

原创 劍指Offer_36_兩個鏈表的第一個公共結點

題目描述 輸入兩個鏈表,找出它們的第一個公共結點。 解題思路 首先求出兩個鏈表的長度,長的鏈表先走到和短的鏈表具有相同長度的位置,然後同時遍歷比較兩個鏈表,直到找到相同的結點。 實現 /*鏈表結點定義*/ public class

原创 劍指Offer_29_最小的K個數

題目描述 輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。 解題思路 解法1 大頂堆,存放k個數字,遍歷數組,當堆的數量小於k,則直接加入堆,否則與堆頂

原创 劍指Offer_45_撲克牌順子

題目描述 LL今天心情特別好,因爲他去買了一副撲克牌,發現裏面居然有2個大王,2個小王(一副牌原本是54張^_^)…他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!!“紅心A,

原创 劍指Offer_40_數組中只出現一次的數字

題目描述 一個整型數組裏除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。 解題思路 兩個相同的數異或得到 0,任何數和 0 異或得到原來的數。可以將所有的數異或(其實就是兩個出現一次的數異或),得到一