leetcode第一题三种不同的解法
引言
在 leetcode 刷题可以快速提高自己的技术水平,但是在此之前,需要你有扎实的基础和一定的数据结构和算法能力,此专栏会以 JavaScript 出发,对 leetcode 题进行详细的教学。在开始学习此专栏之前,我们假设你已经拥有了扎实的 JavaScript 能力和对数据结构与算法有了一定的了解,那么此专栏会锦上添花。希望每一位为了梦想奋斗的人都会被生活善待。
第一题:两数之和
- 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。
答案及解析
- 思路一:嵌套 for 循环:
利用嵌套 for 循环,对每一种出现的可能性进行相加,如果等于 target ,则返回两个数的索引。
/** * @param {number[]} nums * @param {number} target * @return {number[]} */ var twoSum = function(nums, target) { for(let i = 0;i < nums.length;i++){ for(let j = i + 1;j < nums.length;j++) { if(nums[i] + nums[j] == target){ return [i, j]; } } } };
思路二:hash方法
/** * @param {number[]} nums * @param {number} target * @return {number[]} */ var twoSum = function(nums, target) { const map = new Map(); for(let i = 0, len = nums.length;i < len;i++) { if(map.has(target - nums[i])) { return [map.get(target - nums[i]), i]; } map.set(nums[i], i); } return []; };
思路三:indexOf() 查找下标:在一个 for 循环中,寻找 (target - nums[i]) 的值的索引,如果有,并且索引不指向它本身,就是我们要找的索引值,此时由 [i, targetIndex] 就是我们要得到的结果。
/** * @param {number[]} nums * @param {number} target * @return {number[]} */ var twoSum = function(nums, target) { var indexArr = []; for(var i = 0; i < nums.length; i++){ var targetIndex = nums.indexOf(target - nums[i]); if(targetIndex != -1 && targetIndex !== i){ indexarr=[i, targetIndex]; break; } } return indexArr; };
我是与墨学长,希望我连绵不断的分享可以在未来的某一天给你带来帮助。