前端面试题:企业面试真题—8
2020-08-20 13:47
781 查看
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
来源:力扣(LeetCode) 链接:力扣
直观的写法, 循环嵌套
[code]var twoSum = function(nums, target) { for (var i = 0; i < nums.length; i++) { for (var j = i+1; j < nums.length; j++) { if (nums[i] + nums[j] == target) { return [i, j] } } } return null; };
这里最大的性能瓶颈是内层循环, 如果我们想快速的在nums[j]里面找到想要的元素, 不一定要求和, 也可以等价比较.
例如
[code]var twoSum = function(nums, target) { for (var i=0; i<nums.length; i++) { var cha = target-nums[i]; //记录差数 for (var j=i+1; j<nums.length; j++) { if (cha == nums[j]) return [i, j] //只要mums[j]中有相等的, 则符合条件 } } return null; };
但内层循环依然没有去掉, 性能没有提高
用快速定位代替循环遍历
想到使用hashMap
于是再改造
[code]var twoSum = function(nums, target) { var map = new Map(); for (var i=0; i<nums.length; i++) { if (map.has(nums[i])) return [map.get(nums[i]), i]; //map中包含, 则符合条件 map.set(target-nums[i], i); //记录差数及下标, 保存在map里 } return null; };
用map中的has方法, 取代了传统的循环比较, 效率得到了提升
相关文章推荐
- 前端面试题:企业面试真题—7
- 前端面试题:企业面试真题—9
- 前端面试题:企业面试真题—10
- 前端面试题:企业面试真题—3
- 前端面试题:企业面试真题—2
- 前端面试题:企业面试真题—1
- 前端面试题:企业面试真题—4
- 前端面试题:企业面试真题—5
- 前端面试题:企业面试真题—6
- .NET面试题大全,包括微软、华为、中兴等大企业的面试真题
- 大数据开发面试题-企业面试真题【连载】
- NET面试题大全,包括微软、华为、中兴等大企业的面试真题(连载)
- H5企业面试真题实战讲解
- 前端面试:精选经典面试题(二十六)
- 前端面试:精选经典面试题(四)
- 前端面试:精选经典面试题(四十三)
- 前端面试:精选经典面试题(五十六)
- 2019最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)
- 亲历腾讯WEB前端开发三轮面试经历及面试题
- 最新经典web前端面试题,网友:我已经准备好年后面试了!