青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運轉(zhuǎn),開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

題目描述:

Given an array of n integers, such that each number in the array appears exactly twice, except for three numbers (say a, b and c) which appear exactly once.

In O(n) time and O(1) space find a,b and c.

分析:

先看這樣一道題:

n個數(shù)中有且僅有一個數(shù)出現(xiàn)了奇數(shù)次(其它數(shù)都出現(xiàn)了偶數(shù)次),如何用線性時間常數(shù)空間找出這個數(shù)。

解法如下:

從頭到尾異或一遍,結(jié)果就是要求的那個數(shù)。(原理很清楚明了)

再看稍微加強版:

n個數(shù)中有且僅有兩個數(shù)出現(xiàn)了奇數(shù)次(其它數(shù)都出現(xiàn)了偶數(shù)次),如何用線性時間常數(shù)空間找出這個數(shù)。

解法比較巧妙,主要思想是將元素分成兩組,每組中有且僅有一個數(shù)出現(xiàn)了奇數(shù)次(其它數(shù)都出現(xiàn)了偶數(shù)次),然后應(yīng)用上題的結(jié)論解答,至于如何分組,見下:

1、異或所有元素得xors

2、找出xors中不為0的一個bit位(通常從右向左找出第一個不為0的)

3、以2中找到的bit位為sentinel,將數(shù)組分為兩組

本題:

思路類似于求解上題,關(guān)鍵是找出第一個來,然后借助上題結(jié)論求另外兩個

// Let s = a ^ b ^ c.? We know that s not in (a, b, c),
// since if s == a, say, then b ^ c == 0 and b == c.?
// Let f(x) be the lowest bit where x differs from s.?
// The algorithm computes flips = f(a) ^ f(b) ^ f(c),
// since the numbers appearing an even number of times cancel.?
// The variable flips has parity 1, so it is non-zero,
// and lowbit(flips) is a bit where one or three of a, b, c
// differ from s.? It can't be three, however, so the final
// exclusive-or includes exactly one of a, b, c.

代碼:

#include <iostream>

using namespace std;

// get lowest different bit
int lowbit(int x)
{
??? return x & ~(x - 1);
}

// Given an array of n integers, such that each number
// in the array appears exactly twice, except for two
// numbers (say a and b) which appear exactly once.
//
// In O(n) time and O(1) space find a and b.
// e.g.
// { 2 3 3 2 4 6 4 7 8 8 }? ---> a/b = { 6 7}
void Find2(int seq[], int n, int& a, int& b)
{
??? ////XOR
??? int xors = 0;
??? for(int i = 0; i < n; i++)
??????? xors ^= seq[i];

??? ////get different bit
??? int diff = lowbit(xors);

??? ////
??? a = 0;
??? b = 0;
??? for(int i = 0; i < n; i++)
??? {
??????? if(diff & seq[i])
??????????? a ^= seq[i];
??????? else
??????????? b ^= seq[i];
??? }
}


// Given an array of n integers, such that each number
// in the array appears exactly twice, except for three
// numbers (say a, b and c) which appear exactly once.
//
// In O(n) time and O(1) space find a,b and c.
// e.g.
// { 2 3 3 2 4 6 4 7 8 8 1 }? ---> a/b = { 6 7 1}


// Let s = a ^ b ^ c.? We know that s not in (a, b, c),
// since if s == a, say, then b ^ c == 0 and b == c.?
// Let f(x) be the lowest bit where x differs from s.?
// The algorithm computes flips = f(a) ^ f(b) ^ f(c),
// since the numbers appearing an even number of times cancel.?
// The variable flips has parity 1, so it is non-zero,
// and lowbit(flips) is a bit where one or three of a, b, c
// differ from s.? It can't be three, however, so the final
// exclusive-or includes exactly one of a, b, c.

void Find3(int seq[], int n, int& a, int& b, int& c)
{
??? ////XOR
??? int xors = 0;
??? for(int i = 0; i < n; i++)
??????? xors ^= seq[i];

??? ////
??? int flips = 0;
??? for(int i = 0; i < n; i++)
??????? flips ^= lowbit(xors ^ seq[i]);
??? flips = lowbit(flips);

??? ////get one of three
??? a = 0;
??? for(int i = 0; i < n; i++)
??? {
??????? if(lowbit(seq[i] ^ xors) == flips)
??????????? a ^= seq[i];
??? }

??? ////swap a with the last element of seq
??? for(int i = 0; i < n; i++)
??? {
??????? if(a == seq[i])
??????? {
??????????? int temp = seq[i];
??????????? seq[i] = seq[n - 1];
??????????? seq[n - 1] = temp;
??????? }
??? }

??? ////call Find2() to get b and c
??? Find2(seq, n - 1, b, c);
}

int _tmain(int argc, _TCHAR* argv[])
{
??? int a,b,c;
??? int test1[] = { 2, 3, 3, 2, 4, 6, 4, 7, 8, 8 };
??? Find2(test1, 10, a, b);
??? cout<<"a = "<<a<<" , b = "<<b<<endl;

??? int test2[] = {1 , 2 , 3 };//{ 2, 3, 3, 2, 4, 6, 4, 7, 8, 8, 1 };
??? Find3(test2, 3, a, b, c);
??? cout<<"a = "<<a<<" , b = "<<b<<" , c = "<<c<<endl;
??? system("pause");
??? return 0;
}

?

本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/yysdsyl/archive/2009/06/22/4289828.aspx

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产自产v一区二区三区c| 亚洲靠逼com| 在线看成人片| 鲁大师影院一区二区三区| 欧美激情第五页| 99天天综合性| 国产伦精品免费视频| 久久天堂av综合合色| 亚洲电影第三页| 亚洲一区二区三区在线| 国产日韩欧美二区| 麻豆精品在线视频| 一区电影在线观看| 久久精品亚洲乱码伦伦中文| 影音先锋一区| 欧美日韩精品一区二区在线播放 | 亚洲自拍电影| 国产欧美午夜| 亚洲国产精品传媒在线观看| 久久免费视频一区| 亚洲国产精品女人久久久| 亚洲伊人色欲综合网| 国产午夜精品久久久| 欧美韩国在线| 欧美一区精品| 亚洲精品一区二区三区婷婷月| 欧美在线观看视频| 亚洲免费av网站| 国产字幕视频一区二区| 欧美日韩国产不卡| 久久精品国产一区二区三区免费看| 亚洲激情综合| 久久夜色精品国产欧美乱极品| 在线午夜精品自拍| 狠狠操狠狠色综合网| 欧美日韩综合久久| 免费成人av在线看| 午夜国产精品视频免费体验区| 亚洲国产岛国毛片在线| 久久久精品tv| 小嫩嫩精品导航| 亚洲精选91| 一区二区三区在线观看视频| 国产精品美女视频网站| 欧美日本簧片| 欧美1级日本1级| 久久精品日韩| 亚洲欧美日韩国产中文 | 亚洲尤物视频网| 亚洲啪啪91| 亚洲国产99精品国自产| 久久这里只有| 久久久久国色av免费观看性色| 亚洲直播在线一区| 在线综合+亚洲+欧美中文字幕| 亚洲国产欧美在线人成| 精品成人一区| 樱桃国产成人精品视频| 国产欧美日韩视频一区二区三区 | 亚洲免费视频在线观看| 亚洲精品在线电影| 亚洲欧洲精品一区二区三区波多野1战4| 毛片av中文字幕一区二区| 久久国产成人| 久久久91精品国产| 久久国产夜色精品鲁鲁99| 欧美一区二区三区免费视| 亚洲欧美美女| 欧美亚洲视频| 欧美一区二区三区免费视| 欧美亚洲一区二区三区| 欧美在线播放高清精品| 久久精品国产91精品亚洲| 欧美一区二区精品| 久久精品国产v日韩v亚洲| 久久精品国产亚洲aⅴ| 久久精品国产综合| 久久精品国产69国产精品亚洲 | 欧美视频第二页| 欧美三级免费| 国产精品www网站| 国产精品亚洲欧美| 国产亚洲精品bv在线观看| 黄色成人免费观看| 亚洲国产精彩中文乱码av在线播放| 亚洲高清久久久| 亚洲精品孕妇| 亚洲中午字幕| 久久久国产成人精品| 免费成人你懂的| 亚洲精品一区久久久久久| 99视频精品| 性色av香蕉一区二区| 久久精品免费观看| 欧美激情一区二区三区不卡| 国产精品jizz在线观看美国| 国产精品日韩在线| 精品电影一区| 一区二区精品在线观看| 午夜精品久久久久久久蜜桃app | 国产精品日韩欧美一区二区| 国产伪娘ts一区| 亚洲激情av在线| 亚洲在线视频网站| 久久亚洲精品一区| 99视频精品免费观看| 欧美在线黄色| 欧美精品导航| 国产原创一区二区| 亚洲免费久久| 久久久999国产| 亚洲韩国青草视频| 香蕉久久国产| 欧美精品色网| 狠狠久久亚洲欧美专区| 一本久久青青| 老鸭窝亚洲一区二区三区| 日韩亚洲欧美一区| 久久夜色精品亚洲噜噜国产mv | 91久久精品日日躁夜夜躁欧美 | 亚洲午夜伦理| 欧美成人精品高清在线播放| 中日韩在线视频| 欧美成人乱码一区二区三区| 国产视频精品va久久久久久| 日韩视频在线一区二区| 久久九九全国免费精品观看| 亚洲精品国精品久久99热| 性色av一区二区三区| 欧美视频二区| 亚洲区免费影片| 久久久久www| 在线视频免费在线观看一区二区| 久久综合色婷婷| 国产视频一区欧美| 亚洲欧美日韩国产一区| 最新中文字幕一区二区三区| 久久久久久9| 国产伦精品一区| 亚洲综合电影| 亚洲乱码国产乱码精品精可以看 | 韩国精品主播一区二区在线观看| 亚洲一区二区高清视频| 亚洲第一网站| 久久视频一区| 狠狠久久亚洲欧美专区| 久久激情综合| 亚洲欧美在线x视频| 国产精品黄页免费高清在线观看| 99在线热播精品免费| 欧美激情亚洲一区| 麻豆精品视频在线观看| 伊人成人在线视频| 久久午夜视频| 欧美一区二区视频网站| 国产欧美短视频| 欧美中文字幕在线视频| 亚洲一区欧美一区| 国产美女精品一区二区三区| 亚洲欧美日韩一区二区在线| 在线视频日韩精品| 欧美色中文字幕| 亚洲一区二区黄| 亚洲色诱最新| 国产精品亚洲人在线观看| 亚洲综合电影| 校园春色国产精品| 国产一区二区三区观看 | 亚洲淫性视频| 国产日韩久久| 开心色5月久久精品| 久久免费精品视频| 亚洲国产精品va在线看黑人动漫 | 国产精品99久久不卡二区| 国产精品久久久久高潮| 欧美一区二区三区另类| 欧美在线观看一区二区三区| 伊甸园精品99久久久久久| 欧美二区不卡| 欧美日韩国产123| 亚洲欧美国产精品桃花| 亚洲欧美电影院| 尤物九九久久国产精品的特点| 欧美黄色aaaa| 欧美日韩精品综合| 欧美一区二区三区的| 久久精品一区二区| 日韩视频不卡中文| 亚洲一区二区三区精品在线| 国内精品亚洲| 亚洲高清不卡在线| 国产精品成人免费精品自在线观看| 欧美亚洲综合网| 久久久久久久综合| 亚洲视频欧美视频| 欧美在线亚洲在线| 亚洲六月丁香色婷婷综合久久| 亚洲午夜在线观看视频在线| 精品51国产黑色丝袜高跟鞋| 亚洲精品日韩在线|