劍指offer 面試題56 陣列中數字出現的次數

2021-10-04 13:13:13 字數 967 閱讀 8914

問題1:陣列中只出現一次的兩個數字

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。

2 <= nums <= 10000

思路:異或

首先,對陣列的每個數字依次進行異或,得到異或後的結果value。

然後,記value最右邊第一位為1的位為i,依據第i位為1/0將陣列分為兩組。

最後,在每個子陣列中,依次進行異或,異或後的結果為兩個只出現一次的數字。

**:

class solution 

return index;

}bool isbit1(int num,int index)

if(data.empty())

return;

int resor=0;

int len=data.size();

for(int i=0;i複雜度分析:時間複雜度是o(n),空間複雜度是o(1)。

問題2:陣列中唯一只出現一次的數字

在乙個陣列 nums 中除乙個數字只出現一次之外,其他數字都出現了三次。請找出那個只出現一次的數字。

1 <= nums.length <= 10000

1 <= nums[i] < 2^31

思路:位運算

如果乙個數字出現三次,那麼它的二進位制表示的每乙個也出現三次,把二進位制表示的每一位加起來,能被三整除。

某一位不能被整除的說明要求的數字在該位上為1,否則為0.

**:class solution ;

int len=nums.size();

for(int i=0;i=0;--j)

}int res=0;

for(int i=0;i<32;++i)

return res;

}};

複雜度分析:時間複雜度是o(n),空間複雜度是o(1)。

劍指 offer 系列 面試題5, 6

面試題 5 替換空格 思路一 時間複雜度為 o n2 的解法。考慮怎麼替換的操作,最直觀的方法是從頭到尾掃瞄字串,每次碰到空格後進行替換。由於是把 1 個字元替換成 3 個字元,必須將後面的向後移兩個位元組。假設字串的長度是 n。對每個空格字元,需要移動後面 o n 個字元,因此對於含有 o n 個...

劍指offer 面試題56 陣列中數字出現的次數

乙個整型陣列nums裡除兩個數字之外,其他數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 輸入 nums 4,1,4,6 輸出 1,6 或 6,1 輸入 nums 1,2,10,4,1,4,3,3 輸出 2,10 或 10,2 字典 時間複雜度是o ...

《劍指offer》陣列相關面試題

在乙個長度為n的陣列裡所有數字都在0 n 1範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複,也不知道重複了幾次,請找出陣列中任意乙個重複的數字。例如,長度為7的陣列,那麼對應的輸出應該是重複的數字2或者3.思路 重排這個陣列,從頭到尾依次掃瞄這個陣列中的每個數字。掃到下標為i的數字m時 首先...