Single Number 系列

Single Number I

  • 題目:有一個數(shù)據(jù)只出現(xiàn)一次藐翎,其他數(shù)據(jù)都出現(xiàn)兩次
  • 思路:位運算(亦或)阔拳,只要循環(huán)異或齐邦,出現(xiàn)兩次的都變成0了析恋,最后只剩下出現(xiàn)一次的single number
  • 異或解釋
  1. 按位異或運算符“^”是雙目運算符辉川。
  2. 功能是參與運算的兩數(shù)各對應(yīng)的二進位相異或祭椰。
  3. 當(dāng)兩個對應(yīng)的二進制位相異時蔓榄,結(jié)果為1
  4. 例如9^5 可寫成算式如下:00001001^00000101
  5. 結(jié)果為00001100 (十進制為12)
public class Solution {
    public int singleNumber(int[] nums) {
        int result=0;
        for(int i=0;i<nums.length;i++){
            result^=nums[i];
        }
        return result;
    }
}

Single Number II

  • 題目:有一個數(shù)據(jù)只出現(xiàn)一次详恼,其他數(shù)據(jù)均出現(xiàn)3次
  • 思路:位運算

由于只有一個出現(xiàn)一次的數(shù)字堕战,其余數(shù)字都是出現(xiàn)三次
針對于序列中出現(xiàn)三次的所有數(shù)字的每一位來說坤溃,相加的結(jié)果只有兩種:1+1+1==3 或者0+0+0=0
所以加上只出現(xiàn)一次的數(shù)字的對應(yīng)位數(shù)字的話,結(jié)果有兩種:0或4
所以對上述的每一位求和之后對3取余践啄,結(jié)果為:1或0
當(dāng)結(jié)果為1的時候浇雹,也就是這個位上出現(xiàn)了只出現(xiàn)一次的數(shù)字

  • 按位或運算
  1. 功能是參與運算的兩數(shù)各對應(yīng)的二進位相或。
  2. 只要對應(yīng)的二個二進位有一個為1時屿讽,結(jié)果位就為1昭灵。
  3. 例如:9|5可寫算式如下: 00001001|00000101
  4. 結(jié)果為:00001101 (十進制為13)
    也就是9|5=13
public class Solution {
    public int singleNumber(int[] nums) {
        if(nums == null||nums.length == 0){
            return -1;
        }
        //得到出現(xiàn)一次的數(shù)字的值
        int result=0;
        //int為4字節(jié),那么共有32位
        for(int i=0;i<32;i++){
            //保存每一位求和值
            int sum=0;
            for(int j=0;j<nums.length;j++){
                //累加所有數(shù)字上第i位的數(shù)字
                sum+=(nums[j]>>i)&1;
                //System.out.println("sum"+sum);
            }
            //取余得到第i位上的數(shù)字伐谈,更新result
            result|=(sum%3)<<i;
            //System.out.println("res+"+result);
        }
        return result;
    }
}

Single Number III

  • 題目:數(shù)組中只出現(xiàn)一次的兩個數(shù)字
  • 思路:
  1. 異或思想烂完,一個數(shù)與自己異或為0,一個數(shù)與0異或為自己
  2. 由于其它數(shù)字兩兩相同诵棵,所以所有數(shù)異或則得到這兩個不同數(shù)的異或結(jié)果抠蚣。取這個結(jié)果的第一個1作為標(biāo)志位
  3. 這個標(biāo)志的1,必須是:這兩個數(shù)在該位一個為0履澳,一個為1嘶窄,因為是異或操作怀跛,結(jié)果為1必然在這里兩個數(shù)字一個為0一個為1
  4. 這里的結(jié)果必須是會產(chǎn)生的,也就是說肯定存在異或結(jié)果為1柄冲,不然這兩個數(shù)字就是相等的
  5. 這樣可以將數(shù)組分為兩組吻谋,一組在該標(biāo)志位為1,一組在該標(biāo)志位為0现横,這兩個不同數(shù)字分別在這兩組內(nèi)
  6. 將兩組內(nèi)的數(shù)分別異或漓拾,得到兩個結(jié)果則為這兩個不同的數(shù)
public class Solution {
    public int[] singleNumber(int[] nums) {
        int[] res=new int[2];
        if(nums == null||nums.length == 0){
            res[0]=0;
            res[1]=0;
            return res;
        }
        int sum=0;
        for(int i=0;i<nums.length;i++){
            sum^=nums[i];
        }
        int count=0;
        while ((sum&1)==0){
            sum>>=1;
            count++;
        }
        res[0]=0;
        res[1]=0;
        for(int i=0;i<nums.length;i++){
            if((nums[i]&(1<<count))==0){
                res[0]^=nums[i];
            }else{
                res[1]^=nums[i];
            }
        }
        return res;
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市戒祠,隨后出現(xiàn)的幾起案子骇两,更是在濱河造成了極大的恐慌,老刑警劉巖姜盈,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件低千,死亡現(xiàn)場離奇詭異,居然都是意外死亡馏颂,警方通過查閱死者的電腦和手機栋操,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饱亮,“玉大人矾芙,你說我怎么就攤上這事〗希” “怎么了剔宪?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長壹无。 經(jīng)常有香客問我葱绒,道長,這世上最難降的妖魔是什么斗锭? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任地淀,我火速辦了婚禮,結(jié)果婚禮上岖是,老公的妹妹穿的比我還像新娘帮毁。我一直安慰自己,他們只是感情好豺撑,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布烈疚。 她就那樣靜靜地躺著,像睡著了一般聪轿。 火紅的嫁衣襯著肌膚如雪爷肝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音灯抛,去河邊找鬼金赦。 笑死,一個胖子當(dāng)著我的面吹牛对嚼,可吹牛的內(nèi)容都是我干的素邪。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼猪半,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了偷线?” 一聲冷哼從身側(cè)響起磨确,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎声邦,沒想到半個月后乏奥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡亥曹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年邓了,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片媳瞪。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡骗炉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蛇受,到底是詐尸還是另有隱情句葵,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布兢仰,位于F島的核電站乍丈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏把将。R本人自食惡果不足惜轻专,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望察蹲。 院中可真熱鬧请垛,春花似錦、人聲如沸洽议。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绞铃。三九已至镜雨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背荚坞。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工挑宠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人颓影。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓各淀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親诡挂。 傳聞我的和親對象是個殘疾皇子碎浇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)璃俗,斷路器奴璃,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,132評論 0 13
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 29,340評論 8 265
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,770評論 0 38
  • 前言:作為一名android開發(fā)人員城豁,網(wǎng)絡(luò)數(shù)據(jù)都是web開發(fā)人員提供苟穆,每次讓他們寫一個接口都跟求神拜佛一樣,與其求...
    王小賤_ww閱讀 1,866評論 0 2