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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

只出现一次的数字3

發布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 只出现一次的数字3 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一:題目
  • 二:解法
    • 1)異或
    • 2)詳解

一:題目

二:解法

1)異或

本題會使用到異或的方法,關于異或運算符及其在C語言中的使用詳見此文章。

2)詳解

第一步:因為異或是相同為0,相異為1,題目中說到,整個數組中只有兩個數出現了一次,其余全部數均出現兩次。所以把所有元素都進行異或操作,相同的元素異或為0,所以最終異或的結果一定是,那兩個不同元素進行運算結果。假設那兩個不同的元素為X1和X2,其結果一定=X1^X2

第二步:這一步就應該要分離出X1和X2。這里舉例說明

int* singleNumber(int* nums, int numsSize, int* returnSize) {int ret=0;for(int i=0;i<numsSize;i++){ret^=nums[i];}//第一步:因為異或是<b>相同為0,相異為1</b>,題目中說到,整個數組中只有兩個數出現了一次,其余全部數均出現兩次。所以把所有元素都進行異或操作,相同的元素異或為0,所以最終異或的結果一定是,那兩個不同元素進行運算結果int m=0;while(m<32){if(ret & (1<<m))break;else++m;}//找出ret1的第m位為1int x1=0;int x2=0;for(int i=0;i<numsSize;i++){if(nums[i] & (1<<m)){x1 ^= nums[i];}else{x2 ^= nums[i];}} //找到第M位后,再次探查數組,如果某個數的第m位為,則為X1,反之則為X2int* retarr=(int*)malloc(sizeof(int)*2);retarr[0]=x1;retarr[1]=x2;*returnSize=2;return retarr;}

總結

以上是生活随笔為你收集整理的只出现一次的数字3的全部內容,希望文章能夠幫你解決所遇到的問題。

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