一、數(shù)組元素為1-100的數(shù),如何查找缺失的數(shù)字
解題思路:數(shù)字有規(guī)律,只缺失一個數(shù)字的話好判斷,假如數(shù)字總和是sum1 ,那么確實的數(shù)字等于(sum1-sum2),sum2是不完整數(shù)組總和,假如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());
二、請實現(xiàn)一個功能' omniPoller '做以下:
- ' omniPoller '函數(shù)接受兩個參數(shù):' queryStatus '和' successCallback '
- ' queryStatus '是一個返回' true '或' false '的函數(shù)
' successCallback '是一個函數(shù),應(yīng)該在' queryStatus '返回' true '時調(diào)用。
-“omniPoller”應(yīng)該定期調(diào)用“queryStatus”
-當' queryStatus '返回false時,它會等待一段時間并再次調(diào)用' queryStatus ',直到' queryStatus '返回' true ' - ' queryStatus '調(diào)用之間的等待間隔每次增加1.5倍,從1秒開始
-當' queryStatus '返回true時,調(diào)用' successCallback '并退出函數(shù)
例如:
-第一次:等待1秒鐘
-第二次:調(diào)用' queryStatus ',返回' false ',等待1.5秒
-第三次:調(diào)用' queryStatus ',它返回' false ',等待2.25秒
-第四次:調(diào)用' queryStatus ',返回' true ',執(zhí)行' successCallback ',退出
確保“omniPoller”通過以下測試用例:
-“omniPoller”應(yīng)該等待1秒之前,它調(diào)用“queryStatus”第一次
-除第一次(1秒)外,等候時間為前一次的1.5倍
應(yīng)該允許‘omniPoller’被并發(fā)調(diào)用,并且函數(shù)的調(diào)用不會相互干擾
注意:您不必在解決方案中實現(xiàn)' queryStatus '和' successCallback '。你可以假設(shè)它們是已知的。但是,您的實現(xiàn)“omniPoller”應(yīng)該能夠采取不同的實現(xiàn)“queryStatus”和“successCallback”沒有問題,并為此鼓勵您實現(xiàn)幾個版本的“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);