《剑指offer》-数组中只出现一次的数字
生活随笔
收集整理的這篇文章主要介紹了
《剑指offer》-数组中只出现一次的数字
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*
一個整型數組里除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。思路:
如果是只有一個數字出現一次,那么所有數字做異或就得到結果;
現在有兩個數字x,y分別出現一次,其他數字出現兩次,那么所有數字異或的結果是result = x^y
x^y肯定不等于0,那么找其二進制表示中不等于0的一個位,比如從右到左第一個位置好了,那么用這個位置能區分開來這兩個數字,以及其他的數字,每兩個一樣的數字都處于同一邊。
*/
class Solution {
public:void FindNumsAppearOnce(vector<int> data, int* num1, int *num2) {int res = data[0];for (int i = 1; i < data.size(); i++){res = res ^ data[i];}int cnt = 0;while (res % 2 != 1){res = res >> 1;cnt = cnt + 1;}*num1 = *num2 = 0;for (int i = 0; i < data.size(); i++){if ((data[i] >> cnt) & 1){*num1 ^= data[i];}else{*num2 ^= data[i];}}}
};
總結
以上是生活随笔為你收集整理的《剑指offer》-数组中只出现一次的数字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript事件对象
- 下一篇: mysq对存在null值的字段排序