前端人员跳槽前,这些算法你都会了吗?

Q 判断一个单词是否是回文? 很多人拿到这样的题目非常容易想到用for 将字符串颠倒字母顺序然后匹配就行了。其实重要的考察的就是对于reverse的实现。其实我们可以利用现成的函数,将字符串转换成数组,这个思路很重要,我们可以拥有更多的自由度去进行字符串的一些操作。function checkPalindrom(str) {      return str == str.split('').reverse().join('');}
Q 去掉一组整型数组重复的值 道问题出现在诸多的前端面试题中,主要考察个人对Object的使用,利用key来进行筛选。/*** unique an array**/function unique(arr) {    var hashTable = {};  var data = [];   for(var i=0,l=arr.length;i<l;i++) {    if(!hashTable[arr[i]]) {      hashTable[arr[i]] = true;      data.push(arr[i]);    }  }  return data;} Q 统计一个字符串出现最多的字母 前面出现过去重的算法,这里需要是统计重复次数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 in charObj) {    if(charObj[k] >= maxValue) {      maxChar = k;      maxValue = charObj[k];    }  }  return maxChar; } Q 排序算法 如果抽到算法题目的话,应该大多都是比较开放的题目,不限定算法的实现,但是一定要求掌握其中的几种,所以冒泡排序,这种较为基础并且便于理解记忆的算法一定需要熟记于心。冒泡排序算法就是依次比较大小,小的的大的进行位置上的交换。function bubbleSort(arr) {      for(let i = 0,l=arr.length;i<l-1;i++) {        for(let j = i+1;j<l;j++) {          if(arr[i]>arr[j]) {                let tem = arr[i];                arr[i] = arr[j];                arr[j] = tem;            }        }    }    return arr;} 除了冒泡排序外,其实还有很多诸如 插入排序,快速排序,希尔排序等。每一种排序算法都有各自的特点。全部掌握也不需要,但是心底一定要熟悉几种算法。 比如快速排序,其效率很高,而其基本原理如图(来自wiki): 算法参考某个元素值,将小于它的值,放到左数组中,大于它的值的元素就放到右数组中,然后递归进行上一次左右数组的操作,返回合并的数组就是已经排好顺序的数组了。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));} Q 不借助临时变量,进行两个整数的交 这种问题非常巧妙,需要大家跳出惯有的思维,利用 a , b进行置换。主要是利用 + – 去进行运算,类似 a = a + ( b – a) 实际上等同于最后 的 a = b;
function swap(a , b) {    b = b - a;  a = a + b;  b = a - b;  return [a,b];} Q 递归  递归是一种思想:类似于我们的计数器,开闭原则, 递归的实质就是函数自己调用自己,  递归注意点:递归必须有跳出条件,否则是死循环。         用递归求1+100和。  function SumNum(num){       if(num<100){                  return 0;        }       return num+ SumNum(num-1);   }   Q 回掉 什么情况下,使用回调函数,  回调函数一般是用于定义一个规则来使用的, 规则的传递只能通过函数实现,通过变量无法达成,所以我们需要传递规则的时候必须使用回调函数。function selectAll(par1,par2,callback){         return callback(par1,par2);  }   function callback(par1,par2){              return par1+par2;   }  Q 合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素。 张辛欣:难道,我的书写,在你眼中,是自恋倒影?喜欢自拍?下一个句子女读者请慎入:我对网上无所不在的驴脸蛋自拍照,看着就反胃,千篇一律,眼圈都描得跟驴眼睛似得,模样彼此相似,亚洲男生也加入这种自拍行列,太娘了吧?不过Prisma 滤镜app发布当天,我下载APP拍一张自拍,做各种自我变形放相似微博,英国的法国的加拿大的读者看到了立刻下载,拍狗,拍猫,拍风景,玩各种变形贴出来,响应我自拍我变我发表的问题:传统画家出局了?
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值