Leetcode - Array [持續(xù)更新]

15. 3Sum --- Medium
16. 3Sum Closest --- Medium
560. Subarray Sum Equals K --- Medium
189. Rotate Array --- Medium

1. 三數(shù)之和等于0 (Leetcode 15)

Leetcode 15

思路:
暴力解法 - for循環(huán)3輪登颓,找到結果集,去重。但這效率太低,需要更高效的方法。

很容易想到先排序惩阶,再處理。快排愉粤,o(n * log n)時間復雜度。
接下來遍歷該數(shù)組拿撩,對于其中的每一個元素nums[i]衣厘,找到另外兩個元素nums[j] + nums[k] == nums[i].
其中對于每一個元素nums[i], j 初始化為 i+1, k 初始化為 length -1.
根據nums[j] + nums[k] 與 nums[i] 的大小比較,決定 j 往后移動,或者 k 往前移動影暴,找滿足條件的結果错邦。

另外,需要注意型宙,結果的list是不能包含重復組合的撬呢。
那么在遍歷過程中,有兩個地方需要處理好妆兑,才能把重復組合去掉:第 1 點是魂拦,遍歷nums,移到 i搁嗓,如果nums[i] == nums[i - 1]芯勘,那么當前的 i 是不需要被處理的,直接continue就好谱姓;第 2 點是借尿,對于每一個nums[i],在移動 相應的 j,k指針時屉来,每當找到一個結果路翻,需要判斷 j 后面的元素,以及 k 前面的元素茄靠,是不是與當前 j茂契,k指向的元素相等,如果相等慨绳,直接將 j 往后移動掉冶,將 k 往前移動。

2. 最接近指定值的三數(shù)之和 (Leetcode 16)

Leetcode 16

思路:
與上一道3Sum比較類似脐雪。先排序厌小。

for循環(huán)遍歷nums,對于每一個nums[i], 用兩個指針 j, k 遍歷后面的元素战秋,初始化 j = i +1, k = length - 1. 定義一個變量 closest 存放最終結果璧亚,初始化為 nums[0] + nums[1] + nums[2].

對于每一輪循環(huán):
比較 mums[i] + nums[j] + noms[k] - target 的絕對值,與 closest - target 的絕對值脂信,兩者的大小癣蟋。如果前者小,更新closest的值為前者的值狰闪。
比較 nums[j] + nums[k] 與 target - nums[i] 的大小疯搅,如果前者大,則將 指針 k 往前移埋泵,如果前者小幔欧,則將指針 j 往后移,若兩者相等,則直接return target作為最終結果琐馆。

循環(huán)結束规阀,closest的值即為最終結果。

3. 連續(xù)子數(shù)組的和為指定值K瘦麸,求這樣的子數(shù)組的個數(shù) (Leetcode 560)

Leetcode 560

思路:
對于求連續(xù)子數(shù)組的和谁撼,想到可以先計算出數(shù)組data[i],data[i] 存放的是從第 0 到第 i 個元素的和滋饲。
有了data[]數(shù)組之后厉碟,那么找和為 K 的連續(xù)子數(shù)組,等同于找data[i] 和 data[j] 的差值為 K 的情況屠缭,就可以箍鼓。但是,這樣時間效率很低呵曹,需要N方的時間復雜度款咖。有沒有更好的方法呢?有奄喂,不過比較巧妙铐殃。

對于data[i], 如果 i 之前,有某個(或者某幾個)data元素的值為 data[i] - k跨新,那么富腊,data[i] 減去這樣的元素的值,結果為K域帐,那么這樣的子數(shù)組赘被,就是要找的子數(shù)組。這樣的元素的個數(shù)肖揣,就是以nums[i]結尾民假,和為K的子數(shù)組,的個數(shù)龙优。
那么阳欲,可以遍歷data[]數(shù)組,同時用一個HashMap<Integer, Integer>存放data[i]出現(xiàn)的次數(shù)陋率,key為data[i],value為data[i]出現(xiàn)的次數(shù)。
對于data[i]秽晚,先去hashmap里找key為 data[i] - k 相應的value瓦糟,如果有,那么value就是以nums[i]結尾赴蝇,符合條件子數(shù)組的個數(shù)菩浙。如果沒有,那就沒有唄。
再將data[i] 作為key劲蜻,加入hashmap陆淀,值設置為1,或者增加1.

遍歷時先嬉,注意有種特殊情況轧苫,data[i] - k == 0, 也就是data[i] 本身就等于k,這時疫蔓,結果直接加1含懊,同時再去hashmap里找data[i]作為key相應的value,最后也要將data[i]作為key衅胀,再放回hashmap.

整個過程處理好岔乔,是o(n)的時間復雜度。

4. 根據給定K滚躯,旋轉數(shù)組(Leetcode 189)

Leetcode 189

思路:
仔細看看Input和Output雏门,有一個很巧妙的規(guī)律。
先將數(shù)組整個反轉掸掏。接著將前k個反轉茁影,后面length - k個再反轉。就得到Output阅束。
要注意 k 可能大于數(shù)組長度呼胚,所以要先對k取模。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末息裸,一起剝皮案震驚了整個濱河市蝇更,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呼盆,老刑警劉巖年扩,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異访圃,居然都是意外死亡厨幻,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門腿时,熙熙樓的掌柜王于貴愁眉苦臉地迎上來况脆,“玉大人,你說我怎么就攤上這事批糟「窳耍” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵徽鼎,是天一觀的道長盛末。 經常有香客問我弹惦,道長,這世上最難降的妖魔是什么悄但? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任棠隐,我火速辦了婚禮,結果婚禮上檐嚣,老公的妹妹穿的比我還像新娘助泽。我一直安慰自己,他們只是感情好净嘀,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布报咳。 她就那樣靜靜地躺著,像睡著了一般挖藏。 火紅的嫁衣襯著肌膚如雪暑刃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天膜眠,我揣著相機與錄音岩臣,去河邊找鬼。 笑死宵膨,一個胖子當著我的面吹牛架谎,可吹牛的內容都是我干的。 我是一名探鬼主播辟躏,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼谷扣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捎琐?” 一聲冷哼從身側響起会涎,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瑞凑,沒想到半個月后末秃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡籽御,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年练慕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片技掏。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡铃将,死狀恐怖,靈堂內的尸體忽然破棺而出哑梳,到底是詐尸還是另有隱情劲阎,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布涧衙,位于F島的核電站哪工,受9級特大地震影響,放射性物質發(fā)生泄漏弧哎。R本人自食惡果不足惜雁比,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撤嫩。 院中可真熱鬧偎捎,春花似錦、人聲如沸序攘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽程奠。三九已至丈牢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞄沙,已是汗流浹背己沛。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留距境,地道東北人申尼。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像垫桂,于是被迫代替她去往敵國和親师幕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內容

  • 很久以前被第四題:Median of Two Sorted Arrays卡住了诬滩,而且discuss看不明白也沒耐心...
    哈莉_奎茵閱讀 6,932評論 0 3
  • to-do:看一下別人寫的題解 https://github.com/981377660LMT/algorithm...
    winter_sweetie閱讀 734評論 1 0
  • 做題霹粥,實際寫出例子,然后分析可能遇到的情況碱呼,慢慢的蒙挑,思路就會出來了。 線性表 33. Search in Rota...
    小碧小琳閱讀 1,577評論 0 2
  • 1. Two Sum 用hash可以得到O(n)時間的解法愚臀,用python中的enumerate函數(shù)忆蚀,可以獲得元素...
    Morphiaaa閱讀 426評論 0 0
  • 最近正在找實習,發(fā)現(xiàn)自己的算法實在是不能再渣渣姑裂,在網上查了一下馋袜,發(fā)現(xiàn)大家都在刷leetcode的題,于是乎本渣渣也...
    caoxian閱讀 883評論 0 2