leetcode--1、15、167 2Sum、3sum

L1:

無序數組找出相加爲target的兩個數

特徵:無序、無重複、每個元素只能用一次、有且只有一組答案

Tag:O(n) hashmap

解:

Step1:hashmap中,key存儲number,value存儲index。

Step2:在hashmap的key中尋找 target-number。只需常數時間。

Step3:一邊建表一邊比較。如果找到,return;如果沒找到,將其編入表中。

坑:

不能先建立hashmap完整hashmap之後再逐一比較。因爲不可避免同一個元素找到自己。

例如:[3,4,2], target=6。會返回下標[0,0]。

 

 

L167:

有序數組找出相加爲target的兩個數。

特徵:有序、無重複、每個元素只能用一次、有且只有一組答案

Tag:O(n) Two Pointers

解:

一個指針放head,一個指針放tail,

如果nums[head]+nums[tail]<target,則head++; 否則,則tail--

遍歷直到head==tail。

注:

語法。

Vector<int> result {head+1,tail+1}

Return result;

 

L15: 3sum

無序數組找出三個數,這三個數相加爲0。

特徵:無序、有重複、有多組答案

Tag:O(n^2) Two pointers

解:

此題思路在於固定一個數之後,剩下後面的數組可以參考2sum的方法,target爲0-num[i]。

Step0:empty check

Step1:排序

Step2:選定固定的數

Step3:2sum求解

坑:

重複問題。

首先,固定的那個數的重複問題。解決思路爲while循環直到下一個不同的數出現,注意要將第一個存入。

Case[0,0,0,0,0]

其次,head和tail的值不能相同。判斷重複後,用while一直找到不同的head和tail。

Case[-1,-1,0,0,1,1]

 

 

 

發佈了26 篇原創文章 · 獲贊 0 · 訪問量 4952
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章