面试题40:数组中只出现一次的数字
生活随笔
收集整理的這篇文章主要介紹了
面试题40:数组中只出现一次的数字
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目描述
一個(gè)整型數(shù)組里除了兩個(gè)數(shù)字之外,其他的數(shù)字都出現(xiàn)了兩次。請(qǐng)寫程序找出這兩個(gè)只出現(xiàn)一次的數(shù)字。要求時(shí)間復(fù)雜度是O(n),空間復(fù)雜度是O(1)。
題目分析
劍指Offer(紀(jì)念版)P211
① 自己與自己異或?yàn)?
② 0與數(shù)A異或?yàn)锳
③ 異或滿足交換律
代碼實(shí)現(xiàn)
void FindNumsAppearOnce(int data[], int length, int* num1, int* num2) {if (data == NULL || length < 2)return;int resultExclusiveOR = 0;for (int i = 0; i < length; ++ i)resultExclusiveOR ^= data[i];unsigned int indexOf1 = FindFirstBitIs1(resultExclusiveOR); *num1 = *num2 = 0;for (int j = 0; j < length; ++ j){if(IsBit1(data[j], indexOf1))*num1 ^= data[j];else*num2 ^= data[j];} }// 找到num從右邊數(shù)起第一個(gè)是1的位 unsigned int FindFirstBitIs1(int num) {int indexBit = 0;while (((num & 1) == 0) && (indexBit < 8 * sizeof(int))){num = num >> 1;++ indexBit;}return indexBit; }// 判斷數(shù)字num的第indexBit位是不是1 bool IsBit1(int num, unsigned int indexBit) {num = num >> indexBit;return (num & 1); }
轉(zhuǎn)載于:https://www.cnblogs.com/xwz0528/p/4896200.html
總結(jié)
以上是生活随笔為你收集整理的面试题40:数组中只出现一次的数字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dojo中跨域获取新浪股票接口返回的数据
- 下一篇: redis watch multi ex