(js)leetcode 15. 三數之和
題目:
給你一個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組。
示例:
給定陣列 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合為:
[
[-1, 0, 1],
[-1, -1, 2]
]
思路:
今天寫這道題有些曲折,好不容易寫完程式碼點選提交,然後超時了
只好重新換個思路,結果換了之後,每次提交總是不對,只好去看了一下官方的思路,但仍然有錯誤
最終,我發現,呼叫js的sort方法有問題,不能直接使用arr.sort(),這樣對負數的排序並不是按照大小排的,應該使用arr.sort((a,b)=>{return a-b}
1. 對陣列進行排序
2. 從 nums 陣列的第一個數開始遍歷
3. 將第 i 個數之後的數字進行兩兩相加組合,判斷兩數之和是否與第i個數的相反數的值相等
1)若相等,則新增到結果陣列中
2)若兩數相加的結果比第i個數的相反數小,則左邊的數往右移一位
3)否則,右邊的數往左移
程式碼實現:
/**
* @param {number[]} nums
* @return {number[][]}
*/
var threeSum = function(nums) {
nums.sort((a,b)=>{return a-b});
let res = []
for (let i = 0; i < nums.length; i++) {
if (i > 0 && nums[i] === nums[i - 1]) continue;
let sum = 0 - nums[i];
let left = i + 1, right = nums.length - 1;
while (left < right) {
if (nums[left] + nums[right] == sum) {
res.push([ nums[i],nums[left],nums[right] ]);
while (left < right && nums[left] == nums[left + 1]) left++;
while (left < right && nums[right] == nums[right - 1]) right--;
left++;
right--;
}
else if (nums[left] + nums[right] < sum) {
left++;
}
else {
right--;
}
}
}
return res;
};
執行結果:
相關文章
- LeetCode 15.三數之和LeetCode
- LeetCode - 15. 三數之和 2LeetCode
- 15. 三數之和_(c語言版)C語言
- LeetCode15. 三數之和LeetCode
- LeetCode15.三數之和LeetCode
- Day 7| 454.四數相加II 、383. 贖金信 、15. 三數之和 、18. 四數之和
- [LeetCode] 3Sum 三數之和LeetCode
- [陣列]Leetcode15三數之和陣列LeetCode
- day7雜湊表 454.四數相加II |383. 贖金信|15. 三數之和 |18. 四數之和
- LeetCode筆記-三數之和等於0LeetCode筆記
- 【LeetCode(Java) - 259】較小的三數之和LeetCodeJava
- [LeetCode] 3Sum Closest 最近三數之和LeetCode
- LeetCode:兩數之和LeetCode
- LeetCode - 兩數之和LeetCode
- LeetCodeHot100 283. 移動零 11. 盛最多水的容器 42. 接雨水 15. 三數之和LeetCode
- LeetCode 1 兩數之和LeetCode
- leetcode #1 兩數之和LeetCode
- LeetCode之兩數之和LeetCode
- LeetCode-兩數之和LeetCode
- LeetCode: Two sum(兩數之和)LeetCode
- LeetCode18:四數之和LeetCode
- LeetCode 1. 兩數之和LeetCode
- LeetCode-1. 兩數之和LeetCode
- [LeetCode] Two Sum 兩數之和LeetCode
- 程式碼隨想錄演算法訓練營day07|454.四數相加II,383.贖金信,15.三數之和,18.四數之和演算法
- leetcode--三數之和(python實現雙指標法)LeetCodePython指標
- 程式碼隨想錄刷題day 7 | 雜湊表part02 454.四數相加II 383. 贖金信 15. 三數之和 18. 四數之和
- leetcode-0001 兩數之和LeetCode
- 組隊刷LeetCode - 兩數之和LeetCode
- LeetCode 1 兩數之和(簡單)LeetCode
- [LeetCode] 4Sum 四數之和LeetCode
- 演算法題:三數之和演算法
- [LeetCode 刷題] 1. 兩數之和LeetCode
- Leetcode[陣列] 18. 四數之和LeetCode陣列
- LeetCode題集-1- 兩數之和LeetCode
- 雙指標妙解三數之和指標
- 每日一道 LeetCode (1):兩數之和LeetCode
- [演算法] LeetCode 1.兩數之和演算法LeetCode