兩數之和,三數之和,最接近的三數之和,四數之和

2021-09-28 22:00:09 字數 2191 閱讀 2197

二數之和

給定乙個整數陣列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 ...