如何查找缺失的数字,omniPoller

一、数组元素为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);

你可能感兴趣的:(如何查找缺失的数字,omniPoller)