Leetcode位運(yùn)算題總結(jié)

? 136. 只出現(xiàn)一次的數(shù)字?

???? 概述:數(shù)組中一個(gè)元素出現(xiàn)一次,其余元素出現(xiàn)兩次,找出這個(gè)元素。

???? 思路:遍歷數(shù)組中元素,依次使用異或運(yùn)算,得到的結(jié)果即為單一元素。因?yàn)閮蓚€(gè)相同元素相異或得到的結(jié)果為0,而非0元素異或上0得到的是本身。??

```

?int?singleNumber(vector<int>&?nums)?{

??????int?res=0;

??????for(int?i=0;i<nums.size();i++)??res^=nums[i];

??????return?res;

????}

```

面試題56 - II. 數(shù)組中數(shù)字出現(xiàn)的次數(shù) II

?概述:一個(gè)數(shù)組中除一個(gè)數(shù)字只出現(xiàn)一次之外,其他數(shù)字都出現(xiàn)了三次。找出只出現(xiàn)一次的數(shù)字。

思路:判斷每一位上1出現(xiàn)的次數(shù)cnt,如果是三的倍數(shù),則單一元素對應(yīng)位一定為0,否則為1;確定每一位后便得到該元素。

```

????int?singleNumber(vector<int>&?nums)?{

????????int?cnt,res=0;

?????????for(int?i=0;i<32;i++){

?????????????cnt=0;

?????????????int?h=1<<i;

?????????????for(int?j=0;j<nums.size();j++)?{

????????????????if(h&nums[j])?cnt++;

?????????????}

?????????????if(cnt%3!=0)??res+=1<<i;

?????????}

?????????return?res;

????????}

```

面試題56 - I. 數(shù)組中數(shù)字出現(xiàn)的次數(shù)

概述:一個(gè)數(shù)組里除兩個(gè)數(shù)字之外,其他數(shù)字都出現(xiàn)了兩次找出這兩個(gè)只出現(xiàn)一次的數(shù)字。

思路:我們需要把這兩個(gè)數(shù)分開,數(shù)組異或一遍得到num,num必定有一位為1,說明這兩個(gè)數(shù)在這一位上不相同,分別與每一個(gè)數(shù)字作異或,相同則第一組,不同的話就第二組,二者一定會(huì)被分開。

```

vector<int> singleNumbers(vector<int>& nums) {

? ? vector<int>res;

? ? int len=nums.size();

? ? if(!len)? return res;

? ? int a=0,b=0,num=0;

? ? for(int i=0;i<len;i++) num^=nums[i];


? ? int h=1;

? ? while((num&h)==0){

? ? ? ? h<<=1;

? ? }

? ? for(int i=0;i<len;i++){

? ? ? ? if(h&nums[i])

? ? ? ? ? ? a^=nums[i];

? ? ? ? else? b^=nums[i];

? ? }

? ? res.push_back(a);

? ? res.push_back(b);

? ? return res;

? ? }

```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是數(shù)組? 數(shù)組簡單來說就是將所有的數(shù)據(jù)排成一排存放在系統(tǒng)分配的一個(gè)內(nèi)存塊上,通過使用特定元素的索引作為數(shù)組的下...
    啟明_b56f閱讀 1,102評論 0 0
  • 目錄 1. 棧和隊(duì)列1.用兩個(gè)隊(duì)列實(shí)現(xiàn)棧2.用兩個(gè)棧實(shí)現(xiàn)隊(duì)列3.實(shí)現(xiàn)一個(gè)棧,可以用常數(shù)級時(shí)間找出棧中的最小值4.判...
    MigrationUK閱讀 3,138評論 4 20
  • 在C語言中,五種基本數(shù)據(jù)類型存儲(chǔ)空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,078評論 0 2
  • 1、定義一個(gè)函數(shù),任意傳遞三個(gè)整數(shù)類型的值,返回這三個(gè)值的和、差、平均值。 int demo(int v1, i...
    欲難滿閱讀 401評論 1 0
  • /* (無序區(qū),有序區(qū))。從無序區(qū)通過交換找出最大元素放到有序區(qū)前端。 選擇排序思路: 1. 比較相鄰的元素。如果...
    劉帆_d384閱讀 549評論 0 0

友情鏈接更多精彩內(nèi)容