劍指 陣列中數字出現的次數

2021-10-05 20:40:41 字數 1211 閱讀 2255

1,題目:

2,思路:

方法一:異或運算

由於陣列中存在著兩個數字不重複的情況,我們將所有的數字異或操作起來,最終得到的結果是這兩個數字的異或結果:(相同的兩個數字相互異或,值為0,不同的異或,值為1)) 最後結果一定不為0,因為有兩個數字不重複。

(1)首先,得到異或結果,即為不相同兩個數的異或結果sum(如用4 4 6 1來舉例的話,這時sum為0111)

(2)再用&運算,所以我們可以根據陣列元素的二進位制低位第一位是否為1,將陣列分為2類:

方法二:雙指標:

3,**:

方法一:異或運算

class

solution

int first =1;

//通過與運算找到result第乙個不為0的首位,7=>0111,也就是第一位

while

((sum&first)==0

)//first為1,所以我們可以根據陣列元素的二進位制低位第一位是否為1,將陣列分為2類,

// 示例陣列可以分為 低位第一位為0:[4,4,6] 低位第一位為1:[1]

//此時再將兩個陣列兩兩異或就可以得到最終結果。

//需要注意的是,分組的結果必然是相同的數在相同的組,且還有乙個結果數

//因此每組的數再與res=0一路異或下去,最終會得到那個結果數a或b

//且由於異或運算具有自反性,因此只需得到其中乙個數即可

int result=

newint[2

];for(

int i=

0;i)else

}return result;

}}

方法二:雙指標:

class

solution

else

if(nums[rigth]

!= nums[rigth -1]

&& i<2)

else

}return res;

}}

劍指offer 陣列中數字出現的次數

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

陣列中數字出現的次數

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

陣列中數字出現的次數

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