第 86 题:算法题之「两数之和」
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:
给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(20)
function sum(nums, target){
}
一个哈希表一趟循环就可以了
时间复杂度o(2n)吧, 借助HASH查找, 空间复杂度也差了些
排序 + 二分,时间复杂度O(nlogn)。
leetcode第一题
第二种思路可能有点问题,当数组内容都是重复的内容例如twoSum([2,2,2,2],4)
var nums = [1,-5,33,4,66,6,7,8];
var target = 9;
var pos = [];
for(var i=0; i<nums.length-1; i++){
var current = nums[i];
var index = i;
for(var j=i+1; j<nums.length; j++){
if(nums[j] + current === target){
pos.push(i, j);
}
}
}
let arr1 = [1, 2, 3, 7, 8, 10];
let arr2 = [];
let target = 9;
arr1.map((item, index) => {
if(index < (arr1.length-2)) {
for(var i = index;i<arr1.length;i++){
if((item+arr1[i]) == target) {
arr2.push([index, i])
}
}
}
})
function findIndexArr(nums,target){
for(let i=0; i<nums.length;i++){
var index = nums.slice(i+1).indexOf(target-nums[i])
if(index!==-1){
return [i,index+i+1]
}
}
}
每次遍历当前index后的数组部分,找到后,返回index,和index后数组中匹配的元素的位置
/**
*/
var twoSum = function(nums, target) {
for(let i = 0; i < nums.length; i++){
var num_one = target - nums[i]
for(let j = i + 1; j < nums.length; j++){
if(num_one === nums[j]){
return new Array(i, j)
}
}
}
};
思路一:暴力破解法
由于进行了双重循环,时间复杂度是O(n^2), 空间复杂度O(1)
思路二:两趟哈希表
思路三:一趟哈希表