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,...