一、数组元素为1-100的数,如何查找缺失的数字
解题思路:数字有规律,只缺失一个数字的话好判断,假如数字总和是sum1 ,那么确实的数字等于(sum1-sum2),sum2是不完整数组总和,假如1+2+3+4+5=15,演变算法5(5+1)/2 = 15,表达式为n(n+1)/2,假如确实的是3,这个总和就是12,所以拿15减去12就可以求出答案;
function getmissing(){
var arr = [1,2,5,4,6,7,8]
var n = arr.length+1;
var expectsum = n*(n+1)/2;
var sum = 0;
arr.map(item=>sum+=item);
return expectsum-sum;
}
console.log(getmissing());
二、请实现一个功能' omniPoller '做以下:
- ' omniPoller '函数接受两个参数:' queryStatus '和' successCallback '
- ' queryStatus '是一个返回' true '或' false '的函数
' successCallback '是一个函数,应该在' queryStatus '返回' true '时调用。
-“omniPoller”应该定期调用“queryStatus”
-当' queryStatus '返回false时,它会等待一段时间并再次调用' queryStatus ',直到' queryStatus '返回' true ' - ' queryStatus '调用之间的等待间隔每次增加1.5倍,从1秒开始
-当' queryStatus '返回true时,调用' successCallback '并退出函数
例如:
-第一次:等待1秒钟
-第二次:调用' queryStatus ',返回' false ',等待1.5秒
-第三次:调用' queryStatus ',它返回' false ',等待2.25秒
-第四次:调用' queryStatus ',返回' true ',执行' successCallback ',退出
确保“omniPoller”通过以下测试用例:
-“omniPoller”应该等待1秒之前,它调用“queryStatus”第一次
-除第一次(1秒)外,等候时间为前一次的1.5倍
应该允许‘omniPoller’被并发调用,并且函数的调用不会相互干扰
注意:您不必在解决方案中实现' queryStatus '和' successCallback '。你可以假设它们是已知的。但是,您的实现“omniPoller”应该能够采取不同的实现“queryStatus”和“successCallback”没有问题,并为此鼓励您实现几个版本的“queryStatus”和“successCallback”的测试目的
我只想到了一种解题方式,希望看到的朋友比我写的更简单
var num = 1;
function omniPoller(queryStatus,Callback){
let timer = 1000;
let cleartime = setInterval(() => {
if(num!=1){
timer = timer*1.5;
}
console.log(timer)
let status = queryStatus();
if(status){
Callback();
clearInterval(cleartime)
}
}, timer);
}
function queryStatus(){
num+=1;
return num==5?true:false;
}
function successCallback(){
console.log("成功")
}
omniPoller(queryStatus,successCallback);