力扣刷题---第一题---两数之和

举报
代码哈士奇 发表于 2020/12/18 23:20:43 2020/12/18
【摘要】 力扣刷题第一题两数之和 题目要求解题方法一(常规解法)方法二(速度快) 题目要求 解题 方法一(常规解法) 遍历数组 当为第一个数的时候,从后面找有没有和他相加得结果的数 如果有就返回下标 JS代码 var twoSum = function(nums, target) { let data = []; let k = 0; for(...

题目要求

在这里插入图片描述

解题

方法一(常规解法)

遍历数组
当为第一个数的时候,从后面找有没有和他相加得结果的数
如果有就返回下标
JS代码

var twoSum = function(nums, target) {
	let data = [];
	let k = 0;
	for(let i = 0;i<nums.length;i++){
		for (let j = i + 1;j<nums.length;j++){ if(nums[i]+nums[j]==target){ data[k] = i; data[k+1] = j; k++; i=j; }
		}
	}
return data;
};

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

或者

var twoSum = function(nums, target) {
	let c = [];
	for (let index of nums.keys()){
	if(c.indexOf(nums[index])>=0){
		return [c.indexOf(nums[index]),index]
	}
	else{
		c.push(target-nums[index]);
		}	
	}
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

方法二(速度快)

在这里插入图片描述
思路:
既然我们要找一对数,且这一对数的和Y是确定的,那么我们知道X就可以知道需要什么数(Y-X)

所以我们找的是(Y-X)但是遍历原数组比较慢且需要对比,如果建立一个新的对照表比如
我们有一个数组
arr = [1,3,4,2] 求出和target等于6的两数的下标
我们可以新建一个空数组arrN=[]用来存储target-value(当前遍历的arr数组的某个值,比如1也可以是3/4/2)
遍历arr的时候每次先从arrN中看看当前arr数是否存在于arrN
为什么呢,arr遍历第一次的时候 arrN为空,我们让arrN存储5 (6-1)
此时arrN=[5] 此时我们发现5在arrN中的下标是0,1在arr中的下标也是0

继续遍历arr此时遍历到值为3
我们用arrN.indesOf(3)来返回arrN中第一次出现3的下标,如果没有就返回-1,很显然arrN=[5]中并没有3,然后arrN存储3(6-3) 此时arrN=[5,3]
继续遍历arr此时遍历到值为4
我们用arrN.indesOf(4)来返回arrN中第一次出现4的下标,如果没有就返回-1,很显然arrN=[5,3]中并没有4,然后arrN存储2(6-4) 此时arrN=[5,3,2]
继续遍历arr此时遍历到值为2
我们用arrN.indesOf(2)来返回arrN中第一次出现4的下标,如果没有就返回-1,很显然arrN=[5,3,2]中有2,arrN.indesOf(2)返回了2,也就是2在arrN中的下标,此时我们也知道arr遍历到数组下标为3的元素
那么我们返回[2,3]就是题目所需结果

需要理解的是 我们往arrN中存数的时候,比如我们处理arr第一个数1,此时1的下标是0,那么我们的arrN开始存第一个数5(6-1),5在arrN中的下标也是0,5就是匹配下标为0的数所需的数,所以我们在后面找arr中的数是否存在于arrN中就行了。
当我们遍历到4的时候存储了2,遍历到2的时候,发现2存在于arrN中,且下标为2,2在arr中下标是3
所以返回[2,3]

代码如下

var twoSum = function(nums, target) {
	let c = [];
	for (let index of nums.keys()){
		if(c.indexOf(nums[index])>=0){ return [c.indexOf(nums[index]),index]
		}
		else{ c.push(target-nums[index]);
		}	
	}
};

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

或者

var twoSum = function(nums, target) {
	let c = [];
	for (let index of nums.keys()){
		let a = c.indexOf(nums[index]);
		if(a>=0){ return [a,index]
		}
		else{ c.push(target-nums[index]);
		}	
	}
};


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13





后续会推出

每个平台的详细搭建过程

前端:js入门 vue入门 vue开发小程序 等
后端: java入门 springboot入门等
服务器:mysql入门 服务器简单指令 云服务器运行项目
python:推荐不温卜火 一定要看哦
一些插件的使用等

大学之道亦在自身,努力学习,热血青春
如果对编程感兴趣可以加入我们的qq群一起交流:974178910
在这里插入图片描述

有问题可以下方留言,看到了会回复哦

文章来源: blog.csdn.net,作者:代码哈士奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_42027681/article/details/111313620

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。