【发布时间】:2015-12-28 03:33:36
【问题描述】:
给定一个数 n ,一个最小数 min ,一个最大数 max ,最有效的确定方法是什么
号码
n是否在范围内,包括min-max号码
n是否包含重复号码这里的效率意味着方法或方法集需要最少的计算资源并在最少的时间内返回
true或false上下文:
for循环内if的条件,可能需要数千到数十万次迭代才能返回结果;其中返回true或false对于Number检查所需的毫秒数可能会影响性能
在Profiles 面板DevTools 上的71,3307 迭代项目集合上,下面的RegExp 被列为使用27.2ms 的总1097.3ms 来完成循环。在836,7628 项目的集合中,RegExp 下面使用了193.5ms,总共有11285.3ms。
要求:在最短的时间内返回Booleantrue或false的最有效方法。
注意:解决方案不必限于RegExp;下面用作返回预期结果的模式。
当前 js 使用 RegExp re , RegExp.protype.test()
var min = 2
, max = 7
, re = new RegExp("[" + min + "-" + max + "](.)(?!=\1)", "g")
, arr = [81, 35, 22, 45, 49];
for (var i = 0; i < arr.length; i++) {
console.log(re.test(arr[i]), i, arr[i])
/*
false 0 81
true 1 35
false 2 22
true 3 45
false 4 49
*/
}
【问题讨论】:
-
给你三个不...对吗?
-
正则表达式不正确,需要转义反斜杠。
new RegExp("[" + min + "-" + max + "](.)(?!=\\1)", "g") -
@MathewsMathai "给你三个不...对吗?"这个数字可以在两个数字之间;例如,
25到n数字,例如,九个数字271314892 -
@Tushar "正则表达式不正确,需要转义反斜杠。
new RegExp("[" + min + "-" + max + "](.)(?!=\\1)", "g")" 其中\1引用捕获组(.)stackoverflow.com/questions/21880127/… ? -
@guest271314 如果要测试的数字有可能超出给定范围,这将检查数字是否在范围内,如果不在范围内,它将提前返回,以便保存下一个反向引用正则表达式(这是昂贵的)。
标签: javascript algorithm numbers