LeetCode每日一題217: 存在重復(fù)元素

leetcode.png

今天是一道簡(jiǎn)單的算法題, 然而我卻被LeetCode新提交的測(cè)試用例卡住了!

給定一個(gè)整數(shù)數(shù)組,判斷是否存在重復(fù)元素碰镜。

如果任何值在數(shù)組中出現(xiàn)至少兩次兢卵,函數(shù)返回 true。如果數(shù)組中每個(gè)元素都不相同绪颖,則返回 false秽荤。

示例 1:

輸入: [1,2,3,1]
輸出: true

示例 2:

輸入: [1,2,3,4]
輸出: false

示例 3:

輸入: [1,1,1,3,3,4,3,2,4,2]
輸出: true

暴力解法

bool containsDuplicate(int* nums, int numsSize) {   
    for(int i=0; i<numsSize; i++){
        for(int j=i+1; j<numsSize; j++){
            if(nums[i] == nums[j])
                return true;
        }
    } 
    return false;  
}
image.png

不出意外的, 這種時(shí)間復(fù)雜度達(dá)到O(n^2)的方法用 Python 實(shí)現(xiàn)超時(shí)

class Solution(object):
    def containsDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        for i in range(len(nums)-1):
            for j in range(i+1, len(nums)):
                if(nums[i] == nums[j]):
                    return True
        return False

空間換時(shí)間思想

如果這道題限定了數(shù)字的范圍小于等于數(shù)組大小,那么這種方法可以獲得接近O(n)的時(shí)間復(fù)雜度.

判斷的方法是構(gòu)建一個(gè)與數(shù)組temp[numsSize], temp[nums[i]]==0,則此位置為空, 改為1, 若非零則重復(fù).

但是題目中沒有限定, 這意味著負(fù)數(shù)、大于數(shù)組大小的數(shù)都可以使用,下面是錯(cuò)誤示范, 想看正確答案, 跳過這部分.

我想到了用類似散列線性探測(cè)法的方法, 用temp[nums[i]%numsSize]是否為0判斷有無重復(fù), 為0則賦值為nums[i]/numsSize但是小于數(shù)組的的數(shù)商為0,于是我在后面+1

但是這樣還是不能覆蓋所有樣例, 因?yàn)檫€有負(fù)數(shù)的情況, 于是我有用了一個(gè)flag變量與結(jié)果相乘, 再進(jìn)行判斷.

然而還是無法覆蓋...這次已經(jīng)到達(dá)第17個(gè)樣例, 什么問題呢?就是當(dāng)你的商為-1的時(shí)候, +1會(huì)變成0,這樣又沖突了....

如果你有興趣, 可以試試改這段代碼, 讓它通過測(cè)試, 估計(jì)速度不會(huì)特別差.

bool containsDuplicate(int* nums, int numsSize) {
    int *temp;
    int flag = 1;
    // 申請(qǐng)標(biāo)記數(shù)組,對(duì)應(yīng)位置為除數(shù)值則表示已有
    temp = (int *)malloc(sizeof(int)*(numsSize));
    for(int i=0; i<numsSize; i++){
        if(nums[i]<0)
        {
            nums[i]= -nums[i];
            flag = -1;
        }
        if(temp[nums[i]%numsSize]==0){
            // +1讓小于numsSize的數(shù)對(duì)應(yīng)位置的值大于0
            temp[nums[i]%numsSize] = flag*(nums[i]/numsSize+1);
        }
        else if(temp[nums[i]%numsSize]!=0 && 
                 temp[nums[i]%numsSize] == (nums[i]/numsSize+1))
        {
            return true;
        }       
        else{
        }
    }
    return false;
}

正解

哈希是最快的算法, 其次是用快速排序, 結(jié)合遍歷.

Python在這里顯示出極強(qiáng)的簡(jiǎn)潔性, 用集合自帶的哈希算法, 只需一條語句就可以實(shí)現(xiàn)

def containsDuplicate(self, nums):
        return len(set(nums))!=len(nums)

下面這個(gè)解法是網(wǎng)友給出的, 結(jié)構(gòu)是雙層嵌套, 但是運(yùn)行結(jié)果居然才8ms, 很神奇. 不知道是不是測(cè)試?yán)硬粔驑O端.

bool containsDuplicate(int* nums, int numsSize) {
    for(int i=0; i<numsSize; i++){
        for(int j = i-1; j>=0; j--){
            if(nums[i] > nums[j])
                break;
            else if(nums[i] == nums[j])
                return true;
        }
    }
    return false;
}
結(jié)果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末柠横,一起剝皮案震驚了整個(gè)濱河市窃款,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌牍氛,老刑警劉巖晨继,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異搬俊,居然都是意外死亡紊扬,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門唉擂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來餐屎,“玉大人,你說我怎么就攤上這事玩祟「顾酰” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長藏鹊。 經(jīng)常有香客問我胜臊,道長,這世上最難降的妖魔是什么伙判? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任象对,我火速辦了婚禮,結(jié)果婚禮上宴抚,老公的妹妹穿的比我還像新娘勒魔。我一直安慰自己,他們只是感情好菇曲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布冠绢。 她就那樣靜靜地躺著,像睡著了一般常潮。 火紅的嫁衣襯著肌膚如雪弟胀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天喊式,我揣著相機(jī)與錄音孵户,去河邊找鬼。 笑死岔留,一個(gè)胖子當(dāng)著我的面吹牛夏哭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播献联,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼竖配,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了里逆?” 一聲冷哼從身側(cè)響起进胯,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎原押,沒想到半個(gè)月后胁镐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡班眯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年希停,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了烁巫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片署隘。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖亚隙,靈堂內(nèi)的尸體忽然破棺而出磁餐,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布诊霹,位于F島的核電站羞延,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏脾还。R本人自食惡果不足惜伴箩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鄙漏。 院中可真熱鬧嗤谚,春花似錦、人聲如沸怔蚌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桦踊。三九已至椅野,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間籍胯,已是汗流浹背竟闪。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留杖狼,地道東北人瘫怜。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像本刽,于是被迫代替她去往敵國和親鲸湃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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

  • <center>#1 Two Sum</center> link Description:Given an arr...
    鐺鐺鐺clark閱讀 2,151評(píng)論 0 3
  • 排序算法幾種分類方式: 1子寓,穩(wěn)定排序和不穩(wěn)定排序 如果a==b暗挑, 當(dāng)排序之前a在b的前面,排序后斜友,a仍然在b...
    fly_ever閱讀 416評(píng)論 0 0
  • <center>#51 N-Queens</center> link Description:The n-quee...
    鐺鐺鐺clark閱讀 991評(píng)論 0 0
  • 我愿是月季 如果你閑著我愿借春風(fēng)十里香飄無垠溫潤你的呼吸沁入你的心脾 如果你寶馬雕車乘風(fēng)來我愿為你開出百畝月季紅黃...
    江兆勇Jon閱讀 230評(píng)論 0 3
  • 十里煙花恰似你炸裆, 仰望, 星星的你點(diǎn)綴了心空鲜屏。 愛你烹看, 不是一句話了得, 是那煙火洛史, 燦爛火熱了整個(gè)臉頰惯殊。
    兀了了閱讀 172評(píng)論 0 0