A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在前端工程师的工作中,一般很少有机会接触到算法. 但是在面试时也会有一些算法题,这并不是面试官闲得蛋疼为难你, 对于程序员来说, 学习算法知识可以让我们更高效地理解和分析问题.

这里整理了一些常见的有关算法的前端面试题



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

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

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

[JavaScript] 纯文本查看 复制代码
function checkPalindrom(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来进行筛选。
[JavaScript] 纯文本查看 复制代码
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 统计一个字符串出现最多的字母
       给出一段英文连续的英文字符窜,找出重复出现次数最多的字母


[JavaScript] 纯文本查看 复制代码
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;
}



      4 不借助临时变量,进行两个整数的交换
       输入 a = 2, b = 4 输出 a = 4, b =2
      这种问题非常巧妙,需要大家跳出惯有的思维,利用 a , b进行置换。
      主要是利用 + - 去进行运算,类似 a = a + ( b - a) 实际上等同于最后 的 a = b


[JavaScript] 纯文本查看 复制代码
function swap(a , b) { 
  b = b - a;
  a = a + b;
  b = a - b;
  return [a,b];
}


      5 排序算法
      一般面试时的算法题, 都是比较开放的题目,不限定算法的实现,但是一定要求掌握其中的几种,所以冒泡排序,这种较为基础并且便于理解记忆的算法一定需要熟记于心。冒泡排序算法就是依次比较大小,小的的大的进行位置上的交换。
[JavaScript] 纯文本查看 复制代码
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;
}

除了冒泡排序外,其实还有很多诸如插入排序,快速排序,希尔排序等。每一种排序算法都有各自的特点,感兴趣的朋友可以看看我之前的几个帖子.




参考链接:https://www.jianshu.com/p/7331c9a776ea



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马