一、两数之和
题目:给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出 和为目标值 target
的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
javascript
var twoSum = function(nums, target) {
let map={}
for(let i=0;i<nums.length;i++){
let curNum = nums[i];
let targetName = target-curNum;
let targetNameIndex = map[targetName];
if(targetNameIndex!==undefined){
return [targetNameIndex,i]
}
map[curNum]=i;
}
return null;
};
二、三数之和
题目:给你一个整数数组 nums
,判断是否存在三元组 [nums[i], nums[j], nums[k]]
满足 i != j
、i != k
且 j != k
,同时还满足 nums[i] + nums[j] + nums[k] == 0
。请
你返回所有和为 0
且不重复的三元组。
**注意:**答案中不可以包含重复的三元组。
javascript
var threeSum = function(nums) {
let array=[];
const len=nums.length;
if(len<3) return [];
nums.sort((a,b)=>a-b);
for(let i=0;i<len;i++){
// 如果三个数字当中第一个大于0,则和定不为0,结束for循环
if(nums[i]>0) break;
if(i>0&&nums[i]==nums[i-1]) continue;
let l=i+1;
let r=len-1;
while(l<r){
const sum = nums[i]+nums[l]+nums[r];
if(sum==0){
array.push([nums[i],nums[l],nums[r]]);
// 去重,遇到和下一位相同的,直接跳到下一位
while(l<r&&nums[l]==nums[l+1]) l++;
while(l<r&&nums[r]==nums[r-1]) r--;
l++;
r--;
}
else if(sum<0) l++;
else r--;
}
}
return array;
};