題目描述:
給定乙個整數陣列 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 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。小白第一次寫部落格,希望大佬多多指教。這是一道在領扣上標記為中等的陣列題目,題目的難點在於去除重複的三元組。我們想...