js面試必考三問

小軒雪發表於2018-05-18

一、判斷是不是質數.

質數又稱素數。一個大於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);
}
複製程式碼

相關文章