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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面试题56: 数组中数字出现的次数

發布時間:2024/1/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试题56: 数组中数字出现的次数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/******************************************************************* *《劍指Offer——名企面試官精講典型編程題》C++代碼 * * htfeng * 2018.10.09 * * 面試題56: 數組中數字出現的次數 * 題目一:數組中只出現一次的兩個數字 * * 題目一分析: * 相關數字的二進制表示為: * 2 = 0010 3 = 0011 4 = 0100 * 5 = 0101 6 = 0110 * * 步驟1 全體異或:2^4^3^6^3^2^5^5 = 4^6 = 0010 * 步驟2 確定位置:對于0010,從右數的第二位為1,因此可以根據倒數第2位是否為1進行分組 * 步驟3 進行分組:分成[2,3,6,3,2]和[4,5,5]兩組 * 步驟4 分組異或:2^3^6^3^2 = 6,4^5^5 = 4,因此結果為4,6。 * * 題目二: 數組中唯一只出現一次的數字 * * 分析: 基于位運算,若一個數字出現三次,那么它的二進制表示中的每一位也出現三次。把 * 數組中的所有出現三次的數字的二進制表示的每一位分別加起來,則每一位的和都能被3整除, * 再把所求的那個數字的每一位分別加上去,若二進制對應位的和還能被3整除,則所求數字對 * 應位為0,否則為1。最終,得到所求數字的二進制表示。********************************************************************/class Sulotion { public:// 題目一:數組中只出現一次的兩個數字unsigned int FindFirstBitIs1(int num) {int indexBit = 0;while (((num & 1) == 0) && (indexBit < 8 * sizeof(int))) {num = num >> 1;++indexBit;}return indexBit;}bool IsBit1(int num, unsigned int indexBit) {num = num >> indexBit;return (num & 1);}void FindNumsAppearOnce(int data[], int length, int* num1, int* num2) {if (data == nullptr || 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];}}// 題目二: 數組中唯一只出現一次的數字int FindNumberAppearingOnce(int numbers[], int length) {if (numbers == nullptr || length <= 0)return -1;int bitSum[32] = { 0 };for (int i = 0; i < length; ++i) {int bitMask = 1;for (int j = 31; j >= 0; --j) {int bit = numbers[i] & bitMask;if (bit != 0) {bitSum[j] += 1;bitMask = bitMask << 1;}}int result = 0;for (int i = 0; i < 32; ++i) {result = result << 1;result += bitSum[i] % 3;}return result;}}};

轉載于:https://www.cnblogs.com/htfeng/p/9933503.html

總結

以上是生活随笔為你收集整理的面试题56: 数组中数字出现的次数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。