网站开发过程和里程碑,购物网站功能模块图,网站新年特效,怎样申请微信小程序开店两数之和
https://leetcode.cn/problems/two-sum/
描述
给定一个整数数组nums和一个整数目标值target#xff0c;请你在该数组中找出和为目标值target的那两个整数#xff0c;并返回它们的数组下标你可以假设每种输入只会对应一个答案。但是#xff0c;数组中同一个元素在…两数之和
https://leetcode.cn/problems/two-sum/
描述
给定一个整数数组nums和一个整数目标值target请你在该数组中找出和为目标值target的那两个整数并返回它们的数组下标你可以假设每种输入只会对应一个答案。但是数组中同一个元素在答案里不能重复出现你可以按任意顺序返回答案
示例 1
输入nums [2,7,11,15], target 9
输出[0,1]
解释因为 nums[0] nums[1] 9 返回 [0, 1] 。示例 2
输入nums [3,2,4], target 6
输出[1,2]示例 3
输入nums [3,3], target 6
输出[0,1]提示
2 nums.length 1 0 4 10^4 104- 1 0 9 10^9 109 nums[i] 1 0 9 10^9 109- 1 0 9 10^9 109 target 1 0 9 10^9 109只会存在一个有效答案进阶你可以想出一个时间复杂度小于O( n 2 n^2 n2) 的算法吗
算法实现
1 使用Map来匹配
function twoSum(nums: number[], target: number): number[] {const map new Map();for (let i 0; i nums.length; i ) {const current nums[i];const wanted target - current;if (map.has(wanted)) {return [map.get(wanted), i]}map.set(current, i);}
};这种算法的思想就是基于一个注册表来查询匹配返回匹配上的结果
2 暴力枚举
function twoSum(nums: number[], target: number): number[] {const n nums.length;for (let i 0; i n-1; i) {for (let j i 1; j n; j) {if (nums[i] nums[j] target) {return [i, j];}}}return [undefined, undefined];
}注意这里使用双指针将所有可能得结果进行遍历如果匹配则返回相对索引还有就是遍历的边界问题 如果 i n, j n 也是可以的越界后无非就是数值 undefined, 结果是NaN这得益于javascript的弱类型语言如果是其他强类型语言就会报错所以需要特别注意下边界的问题