zoukankan      html  css  js  c++  java
  • 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;
      }
    复制代码
  • 相关阅读:
    浅谈Oracle12c 数据库、用户、CDB与PDB之间的关系
    ECLIPSE快捷键
    Oracle12cWindows安装、介绍及简单使用(图文)
    金士顿DT100 G3 PS2251-07海力士U盘量产修复成功教程
    tomcat绑定域名
    TCP慢启动、拥塞避免、快速重传、快速恢复
    理解HTTP幂等性
    TCP协议缺陷不完全记录
    Nginx模块开发入门
    一步步构建大型网站架构
  • 原文地址:https://www.cnblogs.com/zk666/p/6841153.html
Copyright © 2011-2022 走看看