摘要:本文主要介绍了求解两个数和的JS算法,并结合实例详细分析了JS算法求解两个数和的相关原理、实现方法和操作注意事项。有需要的可以参考一下。
目录
题目描述解题图复习本文举例说明了求解两个数之和的JS算法。分享给你,供你参考,如下:
题目描述
给定一个整数数组和一个目标值,找出数组中的两个数和目标值。
可以假设每个输入只对应一个答案,相同的元素不能重用。
*小费
给定nums=[2,7,11,15],target=9
因为nums[0]nums[1]=2 ^ 7=9
所以返回[0,1]。
:
解法
使用映射记录数组元素值和对应的下标,对于nums[i],判断target-nums[i]中是否有映射。
var twoSum=function(nums,target) {
const _ length=nums.length
const _ may Map=new Map();
for(设I=0;i _ lengthi ) {
if(_ maymap . has(target-nums[I]){
return[_ maymap . get(target-nums[I]),I];
}
_mayMap.set(nums[i],I);
}
};
Map回顾
Map对象保存键值对。任何值(对象或原始值)都可以用作键或值。
新地图([可重复])
Iterable可以是数组,也可以是其他iterable对象,其元素是键值对(二元数组,例如:[[ 1, one ],[ 2, two ]])。每个键值对都被添加到新映射中。Null将被视为未定义。
Objects
和 maps 的比较
与对象映射类似,它们都允许您通过按键来访问值、删除键以及检查键是否绑定到值。
所以(并且没有其他内置的替代方案)在过去,我们一直使用对象作为地图。
但是,地图和对象之间有一些重要的区别,在以下情况下使用地图是更好的选择:
对象的键只能是字符串或符号,而映射的键可以是任何值,包括函数、对象和基本类型。
映射中的键值是有序的,但是添加到对象中的键却不是。因此,当遍历它时,Map对象按照插入的顺序返回键值。
可以通过size属性直接获得一个Map的键值对个数,而一个对象的键值对个数只能手工计算。
Map可以直接迭代,而Object的迭代需要先得到它的key数组,然后再迭代。
每个对象都有自己的原型,原型链上的键名可能与您在对象上设置的键名冲突。
虽然ES5可以从map=Object.create(null)开始创建一个没有原型的对象,但是这种用法并不常见。
在涉及频繁添加和删除键值对的场景中,Map具有一些性能优势。
属性
Map.length
长度属性的值为0。
get Map[@@species]
此构造函数用于创建派生对象。
Map.prototype
表示映射构造函数的原型。允许添加属性以应用于所有地图对象。
所有的 Map 对象实例都会继承 Map.prototype。
Map.prototype.constructor
返回创建实例原型的函数。是默认的映射函数。
Map.prototype.size
返回映射对象的键/值对的数量。
Map.prototype.clear()
移除映射对象的所有键/值对。
Map.prototype.delete(键)
如果该元素存在于Map对象中,则将其移除并返回true;否则,如果元素不存在,则返回false。
Map.prototype.entries()
返回一个新的迭代器对象,该对象包含Map对象中每个元素的[key,value]数组,按插入顺序排列。
Map.prototype.forEach(callbackFn[, thisArg])
按照插入顺序为Map对象中的每个键值对调用callbackFn函数一次。如果为forEach提供了thisArg,它将在每次回调中用作该值。
Map.prototype.get(key)
返回与键对应的值,如果不存在,则返回未定义的值。
Map.prototype.has(key)
返回一个布尔值,该值指示Map实例是否包含与键对应的值。
map . prototype . key()
返回一个新的迭代器对象,该对象按照插入顺序包含Map对象中每个元素的键。
Map.prototype.set(key, value)
设置贴图对象中关键点的值。将返回地图对象。
Map.prototype.values()
返回一个新的迭代器对象,该对象按照插入顺序包含Map对象中每个元素的值。
Map.prototype[@@iterator]()
返回一个新的迭代程序对象,它按插入顺序包含了地图对象中每个元素的[键,值]数组。
例子
var myMap=new Map();
var keyObj={},
keyFunc=function () {},
keyString="一个字符串";
//添加键
myMap.set(keyString,和键一根绳子关联的值);
myMap.set(keyObj,和键keyObj关联的值);
myMap.set(keyFunc,和键keyFunc关联的值);
myMap.size//3
//读取值
我的地图。get(密钥字符串);//和键一根绳子关联的值
我的地图。get(key obj);//和键keyObj关联的值
我的地图。get(key func);//和键keyFunc关联的值
我的地图。get( a string );//和键一根绳子关联的值
//因为keyString===一个字符串
我的地图。get({ });//未定义,因为keyObj!=={}
myMap.get(function() {}) //未定义,因为keyFunc!==function () {}
传递数据
let values Map=new Map();
class payserviceclass {
构造函数(){}
getItem(键){
const String key=String(key);
if (valuesMap.has(key)) {
返回值地图。get(字符串键);
}
返回空
}
setItem(key,val) {
返回值Map.set(String(key),val);
}
clear() {
返回值地图。clear();
}
}
const payservice=new payservice class();
导出默认支付服务;
参考:
https://开发商。Mozilla。org/zh-CN/docs/Web/JavaScript/Reference/Global _ Objects/Map
感兴趣的朋友可以使用
在线HTML/CSS/JavaScript代码运行工具
:http://工具。jb51。net/code/html jsrun测试上述代码运行效果。更多关于Java脚本语言相关内容感兴趣的读者可查看本站专题: 《JavaScript数学运算用法总结》 、 《JavaScript数据结构与算法技巧总结》 、 《JavaScript数组操作技巧总结》 、 《JavaScript排序算法总结》 、 《JavaScript遍历算法与技巧总结》 、 《JavaScript查找算法技巧总结》 及《JavaScript错误与调试技巧总结》
希望本文所述对大家Java脚本语言程序设计有所帮助。