前端常见的一些算法

虽说我们很多时候前端很少有机会接触到算法。大多都交互性的操作,然而从各大公司面试来看,算法依旧是考察的一方面。实际上学习数据结构与算法对于工程师去理解和分析问题都是有帮助的。如果将来当我们面对较为复杂的问题,这些基础知识的积累可以帮助我们更好的优化解决思路。下面罗列在前端面试中经常撞见的几个问题吧。

1 判断一个单词是否是回文?

回文是指把相同的词汇或句子,在下文中调换位置或颠倒过来,产生首尾回环的情趣,叫做回文,也叫回环。比如 mamam redivider .

很多人拿到这样的题目非常容易想到用for 将字符串颠倒字母顺序然后匹配就行了。其实重要的考察的就是对于reverse的实现。其实我们可以利用现成的函数,将字符串转换成数组,这个思路很重要,我们可以拥有更多的自由度去进行字符串的一些操作。

function checkPalindrom(str){  

    return str==str.split('').reverse().join('');

}

2 去掉一组整型数组重复的值

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

3 统计一个字符串出现最多的字母

function  findMaxDuplicateChar(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 incharObj){
    if(charObj[k]>=maxValue){
      maxChar=k;
      maxValue=charObj[k];
    }
  }
  return  maxChar;
 
}

4 排序算法

如果抽到算法题目的话,应该大多都是比较开放的题目,不限定算法的实现,但是一定要求掌握其中的几种,所以冒泡排序,这种较为基础并且便于理解记忆的算法一定需要熟记于心。冒泡排序算法就是依次比较大小,小的的大的进行位置上的交换。

function bubbleSort(arr){  
    for(let i=0,l=arr.length;i<l-1;i++){
        for(let =i+1;j<l;j++){
          if(arr[i]>arr[j]){
                lettem=arr[i];
                arr[i]=arr[j];
                arr[j]=tem;
            }
        }
    }
    return arr;
}
除了冒泡排序外,其实还有很多诸如  插入排序 , 快速排序 希尔排序 等。每一种排序算法都有各自的特点。全部掌握也不需要,但是心底一定要熟悉几种算法。 比如快速排序,其效率很高

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

5 不借助临时变量,进行两个整数的交换

这种问题非常巧妙,需要大家跳出惯有的思维,利用 a , b进行置换。

主要是利用 + – 去进行运算,类似 a = a + ( b – a) 实际上等同于最后 的 a = b;

function swap(a,b){  

  b=b-a;

  a=a+b;

  b=a-b;

  return[a,b];

}

6 随机生成指定长度的字符串

function randomString(n){  
  let str='abcdefghijklmnopqrstuvwxyz9876543210';
  let tmp='',
      i=0,
      l=str.length;
  for(i=0;i<n;i++){
    tmp+=str.charAt(Math.floor(Math.random()*l));
  }
  return tmp;
}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值