劍指Offer Java版 面試題56:數(shù)組中數(shù)字出現(xiàn)的次數(shù)

題目一:數(shù)組中只出現(xiàn)一次的兩個數(shù)字。

一個整型數(shù)組里除了兩個數(shù)字之外来氧,其他的數(shù)字都出現(xiàn)了兩次纳令。請寫程序找出這兩個只出現(xiàn)一次的數(shù)字帮孔。要求時間復(fù)雜度是 O(n),空間復(fù)雜度是 O(1)类缤。

練習(xí)地址

https://www.nowcoder.com/practice/e02fdb54d7524710a7d664d082bb7811
https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof/

參考答案

我們從頭到尾依次異或數(shù)組中的每個數(shù)字臼勉,那么最終得到的結(jié)果就是兩個只出現(xiàn)一次的數(shù)字的異或結(jié)果,因為其他數(shù)字都出現(xiàn)了兩次呀非,在異或中全部抵消了坚俗。由于這兩個數(shù)字肯定不一樣镜盯,那么異或的結(jié)果肯定不為 0岸裙,也就是說,在這個結(jié)果數(shù)字的二進制表示中至少有一位為 1速缆。我們在結(jié)果數(shù)字中找到第一個為 1 的位的位置降允,記為第 n 位。現(xiàn)在我們以第 n 位是不是 1 為標準把原數(shù)組中的數(shù)字分成兩個子數(shù)組艺糜,第一個子數(shù)組中每個數(shù)字的第 n 位都是 1剧董,而第二個子數(shù)組中每個數(shù)字的第 n 位都是 0幢尚。

由于我們分組的標準是數(shù)字中的某一位是 1 還是 0,那么出現(xiàn)了兩次的數(shù)字肯定被分配到同一個子數(shù)組翅楼。因為兩個相同的數(shù)字的任意一位都是相同的尉剩,我們不可能把兩個相同的數(shù)字分配到兩個子數(shù)組中去,于是我們已經(jīng)把原數(shù)組分成了兩個子數(shù)組毅臊,每個子數(shù)組都包含一個只出現(xiàn)一次的數(shù)字理茎,而其他數(shù)字都出現(xiàn)了兩次。

我們已經(jīng)知道如何在數(shù)組中找出唯一一個只出現(xiàn)一次的數(shù)字管嬉,因此皂林,到此為止所有的問題都已經(jīng)解決了。

下面是參考代碼:

// num1,num2分別為長度為1的數(shù)組蚯撩。傳出參數(shù)
// 將num1[0],num2[0]設(shè)置為返回結(jié)果
public class Solution {
    public void FindNumsAppearOnce(int[] array, int[] num1, int[] num2) {
        if (array == null || array.length < 2) {
            return;
        }
        int xor = 0;
        for (int num : array) {
            xor ^= num;
        }
        int index = 0;
        while (xor > 0 && (xor & 1) == 0) {
            xor >>= 1;
            index++;
        }
        for (int num : array) {
            if (((num >> index) & 1) > 0) {
                num1[0] ^= num;
            } else {
                num2[0] ^= num;
            }
        }
    }
}

復(fù)雜度分析

  • 時間復(fù)雜度:O(n)础倍。
  • 空間復(fù)雜度:O(1)。

題目二:數(shù)組中唯一只出現(xiàn)一次的數(shù)字胎挎。

在一個數(shù)組中除一個數(shù)字只出現(xiàn)一次之外沟启,其他數(shù)字都出現(xiàn)了三次。請找出那個只出現(xiàn)一次的數(shù)字犹菇。

練習(xí)地址

劍指 Offer 56 - II. 數(shù)組中數(shù)字出現(xiàn)的次數(shù) II - 力扣(LeetCode) (leetcode-cn.com)

參考答案

class Solution {
    public int singleNumber(int[] nums) {
        if (nums == null) {
            return 0;
        }
        int[] bitSum = new int[32];
        for (int i = 0; i < nums.length; i++) {
            int bitMask = 1;
            for (int j = 31; j >= 0; j--) {
                if ((nums[i] & bitMask) != 0) {
                    bitSum[j]++;
                }
                bitMask <<= 1;
            }
        }
        int result = 0;
        for (int i = 0; i < 32; i++) {
            result <<= 1;
            result += bitSum[i] % 3;
        }
        return result;
    }
}

復(fù)雜度分析

  • 時間復(fù)雜度:O(n)美浦。
  • 空間復(fù)雜度:O(1)。

??劍指Offer Java版目錄
??劍指Offer Java版專題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末项栏,一起剝皮案震驚了整個濱河市浦辨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沼沈,老刑警劉巖流酬,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異列另,居然都是意外死亡芽腾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門页衙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摊滔,“玉大人,你說我怎么就攤上這事店乐〖杼桑” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵眨八,是天一觀的道長腺兴。 經(jīng)常有香客問我,道長廉侧,這世上最難降的妖魔是什么页响? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任篓足,我火速辦了婚禮,結(jié)果婚禮上闰蚕,老公的妹妹穿的比我還像新娘栈拖。我一直安慰自己,他們只是感情好没陡,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布辱魁。 她就那樣靜靜地躺著,像睡著了一般诗鸭。 火紅的嫁衣襯著肌膚如雪染簇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天强岸,我揣著相機與錄音锻弓,去河邊找鬼。 笑死蝌箍,一個胖子當著我的面吹牛青灼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播妓盲,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼杂拨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了悯衬?” 一聲冷哼從身側(cè)響起弹沽,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎筋粗,沒想到半個月后策橘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡娜亿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年丽已,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片买决。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡沛婴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出督赤,到底是詐尸還是另有隱情嘁灯,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布够挂,位于F島的核電站旁仿,受9級特大地震影響藕夫,放射性物質(zhì)發(fā)生泄漏孽糖。R本人自食惡果不足惜枯冈,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望办悟。 院中可真熱鬧尘奏,春花似錦、人聲如沸病蛉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铺然。三九已至俗孝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間魄健,已是汗流浹背赋铝。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沽瘦,地道東北人革骨。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像析恋,于是被迫代替她去往敵國和親良哲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

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