js面试必考三问

820 阅读2分钟

一、判断是不是质数.

质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数

经常被问这个问题的原因:

质数被利用在密码学上,所谓的公钥就是将想要传递的信息在编码时加入质数,编码之后传送给收信人,任何人收到此信息后,若没有此收信人所拥有的密钥,则解密的过程中(实为寻找素数的过程),将会因为找质数的过程(分解质因数)过久,使即使取得信息也会无意义。

在一般领域,对正整数n,如果用2到Math.sqrt(n)之间的所有整数去除,均无法整除,则n为质数。

function isPrime1(n){
    if(n>1 && n<=3){return true}
    else{
      for(var i=2;i<Math.sqrt(n);i++){
        if(n%i==0){return false;}
      }
      return true;
    }
};

二、数组去重

1.最简单的实现:

function repeat(arr){
    let arr2 = [];
    for(let i=0; i<arr.length; i++){
      if(!arr2.includes(arr[i])){
        arr2.push(arr[i]);
      }
    }//(遍历结束)
    return arr2;
}

2.hash的实现:

function repeat(arr){
    let hash={};
    for(var i=0; i<arr.length; i++){
        if(!hash[arr[i]]){
            hash[arr[i]]=1;//将数组每一个元素值都作为属性key,来存储value为1
        }
    }
    var i=0;
    var arr2=[];
    for(arr2[i++] in hash);
    return arr2;
}

发一个我自己写的一个坑代码:(这段代码少了一个结尾分号,但是结果却没有达到预期)

function repeat(arr){
    let hash={};
    for(var i=0; i<arr.length; i++){
        hash[arr[i]]=1;
    }
    var i=0;
    var arr2=[];
    for(arr2[i++] in hash)
    return arr2;
}

三、统计字符串中每种字符出现的次数,出现次数最多的是? 出现?次

只有一个字母会出现最多次

function count(str){  
  for(var i=0,hash={};i<str.length;i++){
    if(hash[str[i]]){
      hash[str[i]]++
    }else{
      hash[str[i]]=1;
    }
  }
  let code = '',num = 1;
  for(let i in hash){
    if(hash[i] > num){
      num = hash[i];
      code = i;
    }
  }
  console.info(code,num);
}

有多个字母会出现多次

function count(str){  
  for(var i=0,hash={};i<str.length;i++){
    if(hash[str[i]]){
      hash[str[i]]++
    }else{
      hash[str[i]]=1;
    }
  }
  let code = '',num = 1;
  for(let i in hash){
    if(hash[i] > num){
      num = hash[i];
      code = i;
    }
  }
  for(let i in hash){
    if(hash[i]==num){arr.push(i)}
  }
  console.info(arr,num);
}