日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面试题40:数组中只出现一次的数字

發(fā)布時(shí)間:2023/12/13 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试题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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。