Leetcode刷題——三數之和
大噶猴,前一段比較忙,刷題日記被耽擱了一段時間,從今天起開始恢復。
今天開始刷leetcode中等難度的演算法題了,第一道是三數之和,看下題目要求:
思路:
好久沒刷題了手非常生,思路也很枯竭,只想到了暴力迴圈,找到所有相加等於零的vector之後對每一個vector做一個排序然後判斷是否相等,erase掉相同的元素。程式碼是這樣的:
class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> result; vector<int> temp; int len = nums.size(); int sum = 0; for(int m = 0;m < len;m++){ for(int n = m + 1;n < len;n++){ for(int o = n + 1;o < len;o++){ sum = nums[m] + nums[n] + nums[o]; if(sum == 0){ temp.push_back(nums[m]); temp.push_back(nums[n]); temp.push_back(nums[o]); result.push_back(temp); temp.clear(); } sum = 0; } } } int l = result.size(); for(int x = 0;x < l;x++){ sort(result[x].begin(),result[x].end()); } for(int y = 0;y < l;y++){ for(int z = y + 1;z < l;z++){ if(result[y] == result[z]){ result.erase(result.begin() + z); l--; z--; } } } return result; } };
可以成功跑通,但是超出了時間限制,非常悲傷。
然後借鑑了別人的思路,可以對輸入的數字先做一個排序,對負數部分進行迴圈,看其後面的兩數相加是否能與它抵消,當然如果第一個數就是整數就是無解的輸入。在計算後面兩數的和的時候我們可以設兩個迭代器,一個從這個數後第一個數開始,一個從最後一個數開始,如果加和小了就移動第一個迭代器,如果加和大了就移動第二個迭代器,就可以遍歷所有情況了。而且因為數字整個都是排序的,如果有重複數字肯定是相鄰的,我們在處理完前一個數之後,如果後一個數與之相等就刪掉,這樣避免了重複情況的出現。程式碼如下:
class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> res; sort(nums.begin(), nums.end()); for (int k = 0; k < nums.size(); ++k) { if (nums[k] > 0) break; if (k > 0 && nums[k] == nums[k - 1]) continue; int target = 0 - nums[k]; int i = k + 1, j = nums.size() - 1; while (i < j) { if (nums[i] + nums[j] == target) { res.push_back({nums[k], nums[i], nums[j]}); while (i < j && nums[i] == nums[i + 1]) ++i; while (i < j && nums[j] == nums[j - 1]) --j; ++i; --j; } else if (nums[i] + nums[j] < target) ++i; else --j; } } return res; } };
可見刷題是不能斷的,感覺自己退步了,sad,還有很多要學習,加油!
我們下期見!
相關推薦
Leetcode刷題——三數之和
大噶猴,前一段比較忙,刷題日記被耽擱了一段時間,從今天起開始恢復。今天開始刷leetcode中等難度的演算法題了,第一道是三數之和,看下題目要求:思路:好久沒刷題了手非常生,思路也很枯竭,只想到了暴力迴圈,找到所有相加等於零的vector之後對每一個vector做一個排序然後
LeetCode演算法題——三數之和
給定一個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。 注意:答案中不可以包含重複的三元組。 例如, 給
leetcode刷題--兩數之和(簡單)
一、序言 第一次刷leetcode的題,之前從來沒有刷題然後去面試的概念,直到臨近秋招,或許是秋招結束的時候才有這個意識,原來面試是需要刷題的,面試問的問題都是千篇一律的,只要刷夠了題就差不多了,當然你的基礎也要紮實,畢竟在技術面的時候很容易露餡的。 所以奉勸各位還未畢業,在大三或大二的師弟師妹早
LeetCode第15題 三數之和
i++ while 剪枝 right ger 超時 分析 leetcode 復雜度 /* 給定一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重復的三元組。 註意:答案中不可
LeetCode 15 3sum 三數之和
題目連結 https://leetcode-cn.com/problems/3sum/ 題意 很簡單,就是給出一個數組,3個數一組,找到所有和為0的組。並且要求不能重複。或者說找其中3個數其和為0,找出所有的組合。 題解
Leetcode 923:三數之和的多種可能(最詳細的解法!!!)
給定一個整數陣列 A,以及一個整數 target 作為目標值,返回滿足 i < j < k 且 A[i] + A[j] + A[k] == target 的元組 i, j, k 的數量。 由於結果會非常大,請返回 結果除以 10^9 + 7 的餘數。 示例 1:
leetcode第一題兩數之和python實現
給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [
【LeetCode】15 三數之和3Sum
給定一個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0? 找出所有滿足條件且不重複的三元組。 注意:答案中不可以包含重複的三元組。 例如, 給定陣列 nums = [-1, 0, 1, 2, -1, -4], 滿足
【LeetCode】#15三數之和(3Sum)
【LeetCode】#15三數之和(3Sum) 題目描述 給定一個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。 注意:答案中不可以包含重複的三元組。 示例 例如, 給
leedcode第15題三數之和詳解
vector<vector<int>> leedcode15::easy_threeSum(vector<int>& nums) { /** * 巧妙解法:其中有一些剪枝優化的思想 * 1、先對給
leetcode 第一題 兩數之和
1、暴力解法 兩個巢狀for迴圈可以解決(188ms) 2、利用map資料結構 用給出的矩陣構建map,只需要用兩個並列的for迴圈(12ms) class Solution { public:
[Leetcode] Python3 實現三數之和
給定一個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。 注意:答案中不可以包含重複的三元組。 例如, 給定陣列 nums = [-1, 0, 1, 2, -1,
leetcode-15:3sum 三數之和
題目: Given an array nums of n integers, are there elements a, b, c in nums such that&n
LeetCode 15 — 3Sum(三數之和)
Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the arra
LeetCode之 15.三數之和 (3Sum)總結
生命不止,刷題不息~~~~~~ 前兩天就一直在做15.三數之和,這個題在LeetCode和LeetCode中國上獲贊很多,絕對的好題啊!不過,我喜歡這個題僅僅是因為它採用了快速排序的思想啦。 從捋清思路到程式碼實現,突破重重Bugs大關,終於提交成功,對於小白而言,實屬不
leetcod刷題---兩數之和
吐槽 今天好冷哇哇哇,真的是凍死人了,今天看貓貓老睡在那裡,然後我過去就舔我的手和臉emmmm。 題目 兩數之和給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums
LeetCode(15. 三數之和)
sel sum 元組 app 判斷 print for .so 整數 問題描述 給定一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重復的三元組。 註意:答案中不可以包含重復的三
力扣(LeetCode)15. 三數之和
-- 整數 -c 去重 clas pub lis inf 分享 給定一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重復的三元組。 註意:答案中不可以包含重復的三元組。 例如,
LeetCode刷題-001兩數之和
不能 OS malloc turn get ++ return 個數 答案 給定一個整數數列,找出其中和為特定值的那兩個數。你可以假設每個輸入都只會有一種答案,同樣的元素不能被重用。示例:給定 nums = [2, 7, 11, 15], target = 9因為 nums
【leetcode 簡單】第三十七題 兩數之和 II - 輸入有序數組
nbsp def art col else ber clas 不可 strong 給定一個已按照升序排列 的有序數組,找到兩個數使得它們相加之和等於目標數。 函數應該返回這兩個下標值index1 和 index2,其中 index1 必須小於 index2。 說明: 返