0219存在重復(fù)元素_Wise

題目描述

給定一個(gè)整數(shù)數(shù)組和一個(gè)整數(shù) k吮旅,判斷數(shù)組中是否存在兩個(gè)不同的索引 i 和 j枣申,使得 nums [i] = nums [j]本辐,并且 i 和 j 的差的絕對(duì)值最大為 k破讨。

示例 1:

輸入: nums = [1,2,3,1], k = 3
輸出: true

示例 2:

輸入: nums = [1,0,1,1], k = 1
輸出: true

示例 3:

輸入: nums = [1,2,3,1,2,3], k = 2
輸出: false

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/contains-duplicate-ii
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有砂蔽。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán)碑定,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處流码。

解題思路

方法一:

滑動(dòng)窗口 嘗試后發(fā)現(xiàn)一直超時(shí)

class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        if k < 0: return False
        for i in range(len(nums)):

            for j in range(i+1,i+k+1):
                if  j < len(nums):
                    if nums[i] == nums[j] :
                        return  True
                    
                else :
                    break
        return False

方法二

方法一中消耗時(shí)間在于每次在窗口內(nèi)搜索成次方增長(zhǎng)2^k,窗口越長(zhǎng)時(shí)間增長(zhǎng)越快延刘。而能降低搜索時(shí)間的方法在于排序漫试。使窗口內(nèi)的元素都是排序的,那么搜索時(shí)自然能夠降低為log(k)碘赖。
那么就需要維持一個(gè)排序了的窗口驾荣。

一個(gè)更好的選擇是使用自平衡二叉搜索樹(BST)。 BST 中搜索普泡,刪除播掷,插入都可以保持 O(log?k)O(\log k)O(logk) 的時(shí)間復(fù)雜度,其中 kkk 是 BST 中元素的個(gè)數(shù)撼班。在大部分面試中你都不需要自己去實(shí)現(xiàn)一個(gè) BST歧匈,所以把 BST 當(dāng)成一個(gè)黑盒子就可以了。大部分的編程語(yǔ)言都會(huì)在標(biāo)準(zhǔn)庫(kù)里面提供這些常見的數(shù)據(jù)結(jié)構(gòu)砰嘁。在 Java 里面件炉,你可以用 TreeSet 或者是 TreeMap。在 C++ STL 里面般码,你可以用 std::set 或者是 std::map妻率。
作者:LeetCode
鏈接:https://leetcode-cn.com/problems/two-sum/solution/cun-zai-zhong-fu-yuan-su-ii-by-leetcode/
來源:力扣(LeetCode)
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)板祝,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處宫静。

方法三

使用樹結(jié)構(gòu)可以把搜索時(shí)間降低為log(k),但是依舊會(huì)超時(shí),需要一個(gè)能夠在常量時(shí)間內(nèi)完成 搜索孤里,刪除伏伯,插入 操作的數(shù)據(jù)結(jié)構(gòu),那就是散列表捌袜。
使用 dict()模擬哈希表

class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        if k < 0: return False
        map = dict()
        
        for i in range(len(nums)):

            if nums[i] in map and i - map[nums[i]] <= k:
                return True
            map[nums[i]] = i

        return False

圖片.png

還可以使用

set() 函數(shù)創(chuàng)建一個(gè)無序不重復(fù)元素集说搅,可進(jìn)行關(guān)系測(cè)試,刪除重復(fù)數(shù)據(jù)虏等,還可以計(jì)算交集弄唧、差集、并集等 https://www.runoob.com/python/python-func-set.html

class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        s = set([])
        for i in range(len(nums)):
            if nums[i] in s:
                return True
            s.add(nums[i])
            if len(s) > k:
                s.remove(nums[i-k])
        return False

總結(jié)

  1. 哈希表可以實(shí)現(xiàn)常數(shù)時(shí)間內(nèi)的查找 修改 和刪除
  2. python中可以使用set()dict() 模擬哈希表
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末霍衫,一起剝皮案震驚了整個(gè)濱河市候引,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌敦跌,老刑警劉巖澄干,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異柠傍,居然都是意外死亡麸俘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門惧笛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來从媚,“玉大人,你說我怎么就攤上這事徐紧【裁剩” “怎么了炭懊?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵并级,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我侮腹,道長(zhǎng)嘲碧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任父阻,我火速辦了婚禮愈涩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘加矛。我一直安慰自己履婉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布斟览。 她就那樣靜靜地躺著毁腿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上已烤,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天鸠窗,我揣著相機(jī)與錄音,去河邊找鬼胯究。 笑死稍计,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的裕循。 我是一名探鬼主播臣嚣,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼剥哑!你這毒婦竟也來了茧球?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤星持,失蹤者是張志新(化名)和其女友劉穎抢埋,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體督暂,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡揪垄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逻翁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饥努。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖八回,靈堂內(nèi)的尸體忽然破棺而出酷愧,到底是詐尸還是另有隱情,我是刑警寧澤缠诅,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布溶浴,位于F島的核電站,受9級(jí)特大地震影響管引,放射性物質(zhì)發(fā)生泄漏士败。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一褥伴、第九天 我趴在偏房一處隱蔽的房頂上張望谅将。 院中可真熱鬧,春花似錦重慢、人聲如沸饥臂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)隅熙。三九已至志衣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間猛们,已是汗流浹背念脯。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弯淘,地道東北人绿店。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像庐橙,于是被迫代替她去往敵國(guó)和親假勿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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