算法題:數(shù)組中出現(xiàn)數(shù)字個(gè)數(shù)總結(jié)

  1. 找出數(shù)組中出現(xiàn)次數(shù)超過(guò)一半的數(shù)字(劍指offer29 leetcode169
    思路:1)partition横殴,快排的部分功能袜炕,O(n)。出現(xiàn)次數(shù)超過(guò)一半即可用快排的思想求中位數(shù)即可。
    2)根據(jù)數(shù)組的特點(diǎn)出發(fā),保存一個(gè)數(shù)和一個(gè)次數(shù)雳锋,如果下次遇到的數(shù)與保存的數(shù)相同,次數(shù)加一羡洁,不同減一玷过,次數(shù)為0 則保存下一個(gè)數(shù),并把次數(shù)設(shè)為1.
class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int num,count=0;
        for(int i=0;i<nums.size();i++){
            if(count==0)
                num=nums[i];
            if(nums[i]==num)
                count++;
            else
                count--;
        }
        return num;
    }
};
  1. 找出最小的k個(gè)數(shù)(topK)
    1.將輸入內(nèi)容進(jìn)行完全排序,選出排在前k的元素冶匹,可選擇快速排序习劫,堆排序和歸并排序咆瘟,時(shí)間復(fù)雜度O(nlogn)嚼隘。
    2.只對(duì)前K大的元素進(jìn)行排序,可選擇冒泡排序或選擇排序進(jìn)行處理袒餐,即每次冒泡都能找到所求的一個(gè)元素飞蛹,時(shí)間復(fù)雜度O(Kn)。
    3.對(duì)輸入內(nèi)容不進(jìn)行排序:1)利用最小堆維護(hù)大小為K的數(shù)組灸眼,該小根堆中的元素是排名前K的數(shù)卧檐,其中根是最小的數(shù)。此后焰宣,每次從原數(shù)組中取一個(gè)元素與根進(jìn)行比較霉囚,如大于根的元素,則將根元素替換并進(jìn)行堆調(diào)整(下沉)匕积,即保證小根堆中的元素仍然是排名前K的數(shù)盈罐,且根元素仍然最小闪唆;否則不予處理盅粪,取下一個(gè)數(shù)組元素繼續(xù)該過(guò)程。該算法的時(shí)間復(fù)雜度是O(nlogK)悄蕾。特點(diǎn):不需要一次將原數(shù)組中的內(nèi)容全部加載到內(nèi)存中票顾。2)利用快排的分劃函數(shù)找到劃分位置k,時(shí)間復(fù)雜度O(n)帆调。(只有當(dāng)我們可以修改輸入的數(shù)組時(shí)可用)
  2. 第一個(gè)只出現(xiàn)一次的字符(劍指offer35奠骄,leetcode387
    思路:1)排序,O(nlogn)
    2)哈希表番刊,第一遍掃描戚揭,用哈希表存儲(chǔ)字符出現(xiàn)的個(gè)數(shù);第二遍掃描撵枢,找出第一個(gè)個(gè)數(shù)為1的字符民晒,O(n)
class Solution {
public:
    int firstUniqChar(string s) {
        unordered_map<char,int> map;
        for(int i=0;i<s.size();i++){
            map[s[i]]+=1;
        }
        for(int i=0;i<s.size();i++){
            if(map[s[i]]==1)
                return i;
        }
        return -1;
    }
};
  1. 字符流中第一個(gè)不重復(fù)的字符(劍指offer269,[nowcoder]
    思路同上锄禽,如需存儲(chǔ)位置潜必,則將map中的value替換為位置,出現(xiàn)兩次及以上賦值為-2沃但,初始化為-1.
    (https://www.nowcoder.com/questionTerminal/00de97733b8e4f97a3fb5c680ee10720))
class Solution
{
public:
  //Insert one char from stringstream
    void Insert(char ch)
    {
         s+=ch;
         map[ch]+=1;
    }
  //return the first appearence once char in current stringstream
    char FirstAppearingOnce()
    {
        for(int i=0;i<s.size();i++){
            if(map[s[i]]==1)
                return s[i];
        }
        return '#';
    }
    unordered_map<char,int> map;
    string s="";
};
  1. 整數(shù)數(shù)組中磁滚,第一個(gè)沒(méi)有出現(xiàn)的正整數(shù)leetcode41
    思路:考慮整數(shù)的范圍和數(shù)組的長(zhǎng)度n的關(guān)系,第一個(gè)沒(méi)有出現(xiàn)的正整數(shù)肯定小于等于長(zhǎng)度。
    (交換可用algorithm.h里的swap)
class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int n=nums.size();
        if(n==0) return 1;
        for(int i=0;i<n;){
            if(nums[i]<n+1&&nums[i]>0&&nums[i]!=nums[nums[i]-1]){
                int tmp=nums[i];
                nums[i]=nums[tmp-1];
                nums[tmp-1]=tmp;
            }
            else
                i++;
        }
        for(int i=0;i<n;i++){
            if(nums[i]!=i+1)
                return i+1;
        }
        return n+1;
    }
};
  1. 找出數(shù)組中只出現(xiàn)一次的數(shù)字垂攘,其它數(shù)字都出現(xiàn)了兩次
    異或
class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int result=0;
        for(int i=0;i<nums.size();i++){
            result=result^nums[i];
        }
        return result;
    }
};
  1. 找出數(shù)組中只出現(xiàn)一次的數(shù)字维雇,其它數(shù)字都出現(xiàn)了三次。
    思路:1)使用map晒他,增加了空間復(fù)雜度O(n)吱型。2)排序,時(shí)間復(fù)雜度O(nlogn)
    3)位操作思想陨仅,不管非孤異元素重復(fù)多少次津滞,這是通用做法。
    對(duì)于右數(shù)第i位灼伤,如果孤異元素該位為0触徐,則該位為1的元素總數(shù)為3的整數(shù)倍。
    如果孤異元素該位為1狐赡,則該位為1的元素總數(shù)不為3的整數(shù)倍(也就是余1)撞鹉。
    換句話說(shuō),如果第i位為1的元素總數(shù)不為3的整數(shù)倍颖侄,則孤異數(shù)的第i位為1鸟雏,否則為0.
    (如果非孤異元素重復(fù)n次,則判斷是否為n的整數(shù)倍)
class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int n=nums.size();
        int result=0;
        for(int i=0;i<32;i++){
            int count=0;
            int mask=1<<i;
            for(int j=0;j<n;j++){
                if(nums[j]&mask)
                    count++;
            }
            if(count%3)
                result|=mask;
        }
        return result;
    }
};

http://blog.csdn.net/jeanphorn/article/details/46501331

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末发皿,一起剝皮案震驚了整個(gè)濱河市崔慧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌穴墅,老刑警劉巖惶室,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異玄货,居然都是意外死亡皇钞,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)松捉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)夹界,“玉大人,你說(shuō)我怎么就攤上這事隘世】墒粒” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵丙者,是天一觀的道長(zhǎng)复斥。 經(jīng)常有香客問(wèn)我,道長(zhǎng)械媒,這世上最難降的妖魔是什么目锭? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任评汰,我火速辦了婚禮,結(jié)果婚禮上痢虹,老公的妹妹穿的比我還像新娘被去。我一直安慰自己,他們只是感情好奖唯,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布惨缆。 她就那樣靜靜地躺著,像睡著了一般臭埋。 火紅的嫁衣襯著肌膚如雪踪央。 梳的紋絲不亂的頭發(fā)上臀玄,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天瓢阴,我揣著相機(jī)與錄音,去河邊找鬼健无。 笑死荣恐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的累贤。 我是一名探鬼主播叠穆,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼臼膏!你這毒婦竟也來(lái)了硼被?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤渗磅,失蹤者是張志新(化名)和其女友劉穎嚷硫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體始鱼,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仔掸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了医清。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片起暮。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖会烙,靈堂內(nèi)的尸體忽然破棺而出负懦,到底是詐尸還是另有隱情,我是刑警寧澤柏腻,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布纸厉,位于F島的核電站,受9級(jí)特大地震影響葫盼,放射性物質(zhì)發(fā)生泄漏残腌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抛猫。 院中可真熱鬧蟆盹,春花似錦、人聲如沸闺金。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)败匹。三九已至寨昙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掀亩,已是汗流浹背舔哪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留槽棍,地道東北人捉蚤。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像炼七,于是被迫代替她去往敵國(guó)和親缆巧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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

  • 概述 排序有內(nèi)部排序和外部排序豌拙,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序陕悬,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,167評(píng)論 0 52
  • 概述:排序有內(nèi)部排序和外部排序按傅,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序捉超,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,727評(píng)論 0 15
  • 1 序 2016年6月25日夜逞敷,帝都狂秦,天下著大雨,拖著行李箱和同學(xué)在校門(mén)口照了最后一張合照推捐,搬離寢室打車(chē)去了提前租...
    RichardJieChen閱讀 5,076評(píng)論 0 12
  • 概述排序有內(nèi)部排序和外部排序裂问,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大牛柒,一次不能容納全部的...
    Luc_閱讀 2,255評(píng)論 0 35
  • 元寶堪簿,我親愛(ài)的兒子,看著你一天天長(zhǎng)大皮壁,我的心就像鮮花在一天天綻放椭更,我期待你的成長(zhǎng),你的變化……可是蛾魄,我又害怕你的成...
    莫到花開(kāi)閱讀 297評(píng)論 0 0