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;
  }
复制代码

posted on 2017-05-11 15:32  zkBlog  阅读(232)  评论(0编辑  收藏  举报