二數之和
給定乙個整數陣列nums
和乙個目標值target
,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。
你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。
示例:
給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
使用乙個map
將遍歷過的數字存起來,值作為key
,下標作為值。
對於每一次遍歷:
時間複雜度:o(n)
空間複雜度o(n)
var twosum = function (nums, target) ;
if (array.isarray(nums)) else }}
return ;
};
三數之和
給定乙個包含n
個整數的陣列nums
,判斷nums
中是否存在三個元素a,b,c
,使得a + b + c = 0 ?
找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組。
例如, 給定陣列 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合為:
[ [-1, 0, 1],
[-1, -1, 2]
]
題目中說明可能會出現多組結果,所以我們要考慮好去重
注意整個過程中要考慮去重
var threesum = function (nums)
let left = i + 1;
let right = nums.length - 1;
while (left < right) else if (sum < 0) else
// 跳過重複數字
while (nums[right] === nums[right + 1]) }}
}return result;
}
四數之和:
給定乙個包含n
個整數的陣列nums
,判斷nums
中是否存在四個元素a,b,c,d
,使得a + b + c + d = 0 ?
找出所有滿足條件且不重複的四元組。
注意:答案中不可以包含重複的四元組。
給定陣列 nums = [1, 0, -1, 0, -2, 2],和 target = 0。
滿足要求的四元組集合為:
[ [-1, 0, 0, 1],
[-2, -1, 1, 2],
[-2, 0, 0, 2]
]
你已經經歷了兩數之和、三數之和,玩玩沒想到,還有四數之和...
其實,後面還有五數之和,六數之和...
到這裡其實我們就能發現一些規律,我們可以像三數之和那樣,我們可以通過大小指標來逼近結果,從而達到降低一層時間複雜度的效果。
不管是幾數之和,我們都用這種方法來進行優化。
var foursum = function (nums, target)
nums.sort((a, b) => a - b);
const result = ;
for (let i = 0; i < nums.length - 3; i++)
if (nums[i] + nums[i + 1] + nums[i + 2] + nums[i + 3] > target)
for (let j = i + 1; j < nums.length - 2; j++)
let left = j + 1,
right = nums.length - 1;
while (left < right)
if (sum <= target) else }}
}return result;
};
最接近的三數之和
給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2...
最接近的三數之和
給定乙個包括 n 個整數的陣列nums和 乙個目標值target。找出nums中的三個整數,使得它們的和與target最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2 1 2 pu...
最接近的三數之和
題目 有點類似三數之和的進化版 給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target ...