2021 1 24 刷題(三數之和 雜湊表)

2022-06-11 12:30:08 字數 2130 閱讀 2184

題目描述:

給定乙個整數陣列 nums 和乙個整數目標值 target,請你在該陣列中找出 和為目標值 的那 兩個 整數,並返回它們的陣列下標。

你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。你可以按任意順序返回答案。

示例 1:

輸入:nums = [2,7,11,15], target = 9

輸出:[0,1]

解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

輸入:nums = [3,2,4], target = 6

輸出:[1,2]

示例 3:

輸入:nums = [3,3], target = 6

輸出:[0,1]

解題:建立乙個雜湊表,對於每乙個 x,我們首先查詢雜湊表中是否存在 target - x,然後將 x 插入到雜湊表中,即可保證不會讓 x 和自己匹配。

class solution ;

}map.insert(pair(nums[i], i));

}return {};}};

題目描述:

給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有和為 0 且不重複的三元組。

注意:答案中不可以包含重複的三元組。

示例 1:

輸入:nums = [-1,0,1,2,-1,-4]

輸出:[[-1,-1,2],[-1,0,1]]

示例 2:

輸入:nums =

輸出:示例 3:

輸入:nums = [0]

輸出:分析:

【首先將陣列排序,將排序過的元素存入雜湊表中。通過兩層遍歷,確定好前兩位數字,那麼我們只需要雜湊表是否存在符合情況的第三位數字即可。跟暴力解法的思路類似,很容易理解,但是這裡我們需要注意的情況就是,例如我們的例子為[-2 , 1 , 1],如果我們完全按照以上思路來的話,則會出現兩個解,[-2 , 1 , 1]和[1 , 1, -2]。具體原因,確定 -2,1之後發現 1 在雜湊表中,存入。確定 1 ,1 之後發現 -2 在雜湊表中,存入。所以我們需要加入乙個約束避免這種情況,那就是我們第三個數的索引大於第二個數時才存入。

題解:

class solution 

for(int i = 0; i < nums.size(); i++)

target = -nums[i];

if(i > 0 && nums[i] == nums[i-1])

for(int j = i + 1; j < nums.size(); j++)

auto iter = map.find(target - nums[j]);

if(iter != map.end())

;resultlist.push_back(temp);

}else}}

}return resultlist;}};

遇到了幾個問題:

方法二: 雙指標法

雜湊表法特別注意去重問題。可以採用另一種方法-雙指標法,時間複雜度也為o(n^2)。

if(i > 0 && nums[i] == nums[i-1]) //去重

int left = i + 1;

int right = nums.size() -1;

while(left < right)

else if((nums[i] + nums[left] + nums[right]) < 0)else);

while(right > left && nums[right] == nums[right-1]) right--;

while(right > left && nums[left] == nums[left + 1]) left++;

right--;

left++;}}

}return result;}};

每日刷題 三數之和

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。示例 給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 方法一 列舉。將所有...

LeetCode刷題 , 兩數之和 , 雜湊表

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所...

領扣刷題 15 三數之和

題目要求 給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。小白第一次寫部落格,希望大佬多多指教。這是一道在領扣上標記為中等的陣列題目,題目的難點在於去除重複的三元組。我們想...