js 中的算法題,那些經常看到的


      js中遇到的算法題不是很多,可以說基本遇不到。但面試的時候,尤其是一些大公司,總是會出這樣那樣的算法題,考察一個程序員的邏輯思維能力。如下:

     1、回文。

       回文是指把相同的詞匯或句子,在下文中調換位置或顛倒過來,產生收尾回環的情況,也叫回環。如:mamam,redivider.

       實現回文不是我們最常用到的for循環,而是reverse的運用。將字符串轉化為數組,將數組順序顛倒后,再轉化為字符串,這個過程就實現的回文。

     代碼的實現:

 function back(str){
    return str== str.split('').reverse().join('');
}

 

    2、去掉一組整型數組中重復的值

 

比如輸入: [1,13,24,11,11,14,1,2]
輸出: [1,13,24,11,14,2]
需要去掉重復的11 和 1 這兩個元素

   這道題在面試的試題中出現率比較高,主要考察個人對object的使用,利用key來進行篩選。

   js的實現代碼:

  

let unique =  function(arr){
   let hash={};
   let data=[];
    for (let i=0;i<arr.length;i++){
         if (!hash[arr[i]])  {
               hash[arr[i]]=true;
                data.push(arr[i]);
      }      
   }
   return data

}

 

  3、統計一個字符串中出現最多的字母

     給出一個字符串,統計出現次數最多的字母。如:“wqeqwhixswiqhdxsq”,其中出現最多的是q.

   js算法的實現

function findMax(str){     
     if  (str.length ==1){
        return str;
     }
  let charObj = {};
  for (let i=0;i<str.length;i++) {
      if(!charObj[str.charAt(i)]){
           charObj[str.charAt(i)]=1;
         } else{
             charObj[str.charAt(i)]+=1;
       }

   }

      let maxChar='',
             maxValue=1;
      for (var k in charObj){
          if (charObj[k]>=maxValue){
             maxChar=k;
             maxValue = charObj[k];


       }
    }
 
    return maxChar;



}

  4、順序算法

    a、冒泡排序

       

function mao(arr){
    for (let i=0,i<arr.length-1,i++){

      for(let j=0;j<arra.length-i-1; j++){
if (arr[i]>arr[j]){
let tem
=arr[i];
arr[i]
=arr[j];
arr[j]
=tem;
}
}
}
return arr;
}

   

    b、快速排序(快排)

      

 

function quick(arr){
if
(arr.length<=1){ return arr; } let leftArr=[]; let rightArr=[]; let q=arr[0];
for(let i=1; i<arr.length;i++){
if (arr[i]>q){
rightArr.push(arr[i]);
} else{
leftArr.push(arr[i]);
}
} return [].concat(quick(leftArr),[q],quick(rightArr)); }

 

      5、不需要借助第三個臨時變量,實現兩個變量的交換

         js實現方法:

  

function swap(a,b){
    b=b-a;
    a=a+b;
    b=a-b;
      return [a,b];

   }

  

   6、斐波那契數列

     js的實現方法

  

function getFib(n){
   var fibairr =[];
   var  i=0;
   while(i<n) {
     if (i<=1){
       fibarr.push(i);
      } else{
     fibarr.push(fibarr[i-1])
        } 
    i++;
  }

  return fibarr;
}

   7、找出下列正整數組的最大差值

     輸入的數組是[10,5,11,7,8,9]

     輸出 6

    js的實現方法:

    

  function getMaxPro(arr){

    var minPrice=arr[0];
    var maxProfit=0;

    for (var i=0;i<arr.length;i++){

       var currentPrice=arr[i];

       minPrice=Math.min(minPrice,currentPrice);

      var potentialProfit =currenrPrice-minPrice;

       maxProfit=Math.max(maxProfit,potentialProfit);

     }
     return maxProfit;  

   }

 

         8、隨機生成指定長度的字符串

         比如指定的長度為8

        js的實現方法:

         

 function random(n){
   let str='abcdefghijkmnopqrstuvwxyz9876543210';
   let tmp='',
     i=0,
     l=str.length;

  for(i=0;i<n;i++){
    tmp +=str.charAt(Math.floor(Math.random()*l))

    }

    return tmp;
  }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM