简言:
数据结构和算法是支撑我们程序员的基础也是百宝箱。掌握它们是成为一名优秀的软件工程师或计算机科学家的必备条件,深入理解数据结构和算法可以帮助开发人员更好地理解计算机科学的核心原理和思想,因此,对于任何想要从事软件开发或计算机科学领域的人来说,深入学习和理解数据结构和算法都是至关重要的。
所以今天长安开始和小伙伴一起开始Leetcode的旅程。
前言
刷题网站千千万,长安感觉对于想要进入大厂的伙伴们还是多逛逛Leetcode吧,毕竟大部分面试题这里的真的很有质量。
正篇
在 JavaScript 中,数组是一种用于存储多个值的有序集合。数组是一种非常常见和重要的数据结构,它可以容纳各种类型的数据,包括数字、字符串、布尔值、对象甚至是其他数组。
var arr = []
arr.push('hello') //尾部相加
arr.unshift(123) //头部相加
arr.pop() // 尾部删除
arr.shift() //头部删除
- 数组方法: JavaScript 提供了许多用于操作数组的方法,例如添加、删除、替换、排序等。一些常用的数组方法包括:
push()
:向数组末尾添加一个或多个元素。pop()
:删除并返回数组的最后一个元素。shift()
:删除并返回数组的第一个元素。unshift()
:向数组的开头添加一个或多个元素。splice()
:从指定位置开始删除/替换元素,或向数组中添加新元素。slice()
:返回数组的一部分,不修改原数组。concat()
:连接两个或多个数组。indexOf()
:返回数组中某个元素第一次出现的索引。lastIndexOf()
:返回数组中某个元素最后一次出现的索引。forEach()
:对数组中的每个元素执行指定操作。
两数之和 作为第一道,可能很轻易解答出来,今天长安就介绍三个方法来扩展一下各位的思维。
Step1.
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]
}
}
}
定义两个变量,第一个变量i拿出来依次遍历,随之将j从i+1开始,每取一个i取个值,j都从i+1的位置遍历,随后对上target记录相应的下标即为所求值。
Step2.
for(var i =0; i < nums.length -1; i++){
var res = target - nums[i]
var index = nums.indexOf(res, i+1)
if(index !== -1){
return [i,index]
}
}
换个思路,对于解法一中的j值,可以用对应的target-i值来取,上文介绍indexOf返回数组中某个元素第一次出现的索引,创建index记录result的下标。i值依然遍历,用index记录result的下标返回即可。
Step3.
var diff = {}
for (var i = 0; i < nums.length; i++) {
if (diff[nums[i]] !== undefined) { // 查找对象中是否存在值,是不需要循环的
return [diff[nums[i]], i]
}
diff[target - nums[i]] = i
}
嗯...,创建个diff,根据i的取值,设定一个完美切合target的diff值,若是确定了对于i值匹配的diff值,即可输出所需要的对应两个数的下标。
总结
每段算法都有不一样的解法,需要我们多去思考,发散性思维来进行解答,长安跟随着小伙伴们一起去努力coding!!