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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

一个整数数组,每个数字都出现K次,只有一个数字出现M次,找出这个数字(线性时间)

發布時間:2024/4/19 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个整数数组,每个数字都出现K次,只有一个数字出现M次,找出这个数字(线性时间) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原題鏈接https://leetcode.com/problems/single-number-ii/description/
這類題都是形如給定一個整型數組,數組中每一個數字都出現了K次,只有一個數字出現M次,其中M < K,找到這個數字,要求在線性時間完成且不使用額外的內存空間。

首先考慮K = 2,M = 1的情況,此時可以使用異或運算遍歷一遍數組元素,最后異或的結果就是只出現一次的數。因為異或運算具有如下性質:

A ^ A = 0; A ^ A ^ B = B; A ^ A ^ B = A ^ B ^ A = B ^ A ^ A = B;

所以在遍歷的過程中,出現兩次的元素都像A ^ A 一樣變為0了,最后只留下一個B。

之后考慮把整數看成32bit的二進制數,對于每一個二進制位,異或其實就是如果這個位置出現了兩個1,那么就把這個位置變為0。
但是不管出現了多少個1,最后都能組成只出現一次的那個數字,比如說,只出現一次的那個數字是n,n的第7位是1,那么數組中所有元素的第7位計數,一定會有奇數個1,拿出一個1后,剩下的偶數個1彼此異或為0,最后留下的1組成n的第七位。

接下來考慮K > 2的情況,如果K = 3,M = 1或2。此時就不能通過異或直接求得結果,但是異或的思想是二進制位遇到2個1后變為0,利用這個思想,我們可以自己設計一種運算,滿足二進制位遇到3個1后變為0,這樣再遍歷一遍數組元素,剩下的便是要找的出現M次的數字。但是M有1和2兩種,怎么區分是出現1次還是出現2次呢,這就需要對M也進行記錄,出現1次和出現2次的都需要記錄下來。

舉個例子,假設int a記錄出現1次的數字,int b記錄出現2次的數字。從二進制的角度考慮,a的每個二進制位如果是1表示這個二進制位出現1次,相應的b的這個二進制位就是0。b的每個二進制位如果是1表示這個二進制位出現2次,相應的a的這個二進制位就是0。

從二進制的角度考慮,對于32bit中的某一個bit來說
ab的取值為00-01-10-00,
00:這個位置出現0個1或者3個1
10:這個位置出現1個1
01:這個位置出現2個1

用表格的形式表示出現就是:
a:是1表示出現1次
b:是1表示出現2次
c:即將遍歷到的數字的該bit
na:改變后的a
nb:改變后的b

a b c na nb 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 1 0 1 0 1 0 1 0 1 1 0 0

所以新定義的運算操作就是讓a和b分別為1的運算

a b c na nb 1 0 0 1 0 0 0 1 1 0

na = (a&~b&~c) | (~a&~b&c);

a b c na nb 0 1 0 0 1 1 0 1 0 1

nb = (~a&b&~c) | (a&~b&c);

最后,a表示的是出現1次的數,b表示的是出現兩次的數。

class Solution { public:int singleNumber(vector<int>& nums) {int a = 0;int b = 0;for(int c : nums){int tmpa = (a&~b&~c) | (~a&~b&c);b = (~a&b&~c) | (a&~b&c)a = tmpa;}//return a; //出現1次的數字//return b; //出現2次的數字return a | b; //不知道是出現1次還是出現2次的數字} };

最后,當K更大時,需要的二進制位數只需要能表示K就可以了,比如K = 5,那么需要4個二進制位0000-0001-0010-0100-1000-0000。但是需要記錄的M次數字就會很多,可以視情況而定,這個則需要4個數字分別記錄出現1,2,3,4次的數。

總結

以上是生活随笔為你收集整理的一个整数数组,每个数字都出现K次,只有一个数字出现M次,找出这个数字(线性时间)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 黄色香蕉视频 | 黄色一级在线视频 | 国产夫妻av | 在线色站| 成人三级影院 | 亚洲AV无码国产精品播放在线 | 亚欧乱色| 亚洲激情啪啪 | 97se亚洲国产综合在线 | 欧美一区久久 | 久久精品亚洲精品 | 亚洲一级Av无码毛片久久精品 | 久久久久久久久久久久久久久久久久久 | 色av一区二区 | 亚洲一区二区国产精品 | 亚洲一区二区三区91 | 嫩草网站在线观看 | 久久久久久久久久久久久女过产乱 | 在线a免费| 91精品久久久久久久99蜜桃 | 九九九精品视频 | 日韩在线免费视频观看 | 亚洲 欧美 日韩在线 | 久久春色 | 日本少妇做爰全过程毛片 | 日本在线视频不卡 | 黄色大片91 | 一级片视频免费看 | 天天射一射 | 日本三级播放 | 一直草 | 九九看片| 污网在线观看 | 亚洲一区二区免费看 | 欧美成本人视频 | 亚洲精品在线免费观看视频 | 精品人妻人伦一区二区有限公司 | 亚洲成人无码久久 | 亚洲一级在线播放 | 99久久精品免费看国产免费软件 | 在线成人一区二区 | 91av福利| 1000部啪啪未满十八勿入超污 | 国产一二在线 | 手机av免费在线观看 | 高清不卡一区 | 欧美做爰爽爽爽爽爽爽 | 人人人妻人人澡人人爽欧美一区 | 综合久久99 | 女教师痴汉调教hd中字 | 国产美女一区 | 欧美黑人精品一区二区 | 在线看的免费网站 | 韩国黄色片网站 | 天天干天天操天天 | 日本少妇videos高潮 | 日韩av在线播放不卡 | 亚洲精品午夜国产va久久成人 | 日本少妇bbwbbw精品 | 成人乱码一区二区三区av | 天天射日日 | 97精品一区二区三区 | 久久情趣视频 | 一区二区三区在线看 | 亚洲精品乱码久久久久久蜜桃图片 | 人妖和人妖互交性xxxx视频 | 一区二区视频在线免费观看 | 丁香一区二区 | 国产91一区二区三区 | 美女脱衣服一干二净 | 国产精品国产三级国产 | 日韩女同一区二区三区 | 日韩国产中文字幕 | 国产成人在线看 | 亚洲色图影院 | 五月天丁香社区 | 中文字幕高清在线播放 | 午夜一区二区三区免费观看 | 后宫秀女调教(高h,np) | 色葡萄影院 | 国产欧美亚洲精品 | www.com欧美| 亚洲成人黄色在线 | 国产免费看av| 久久久久久亚洲中文字幕无码 | 黄页免费视频 | 日韩午夜激情电影 | 青娱乐国产精品 | 国产传媒专区 | 在线看的网站 | 五月天婷婷网站 | 免费播放毛片 | 在线看你懂得 | 息与子五十路翔田千里 | 免费一级a毛片夜夜看 | 91精品视频在线免费观看 | 97成人资源 | 大地资源在线观看免费高清版粤语 | 国模吧无码一区二区三区 |