虽然算法在前端开发中很少会得以使用,不过面试中总是会有一些经典的算法面试题。显然,学习算法对于任何工程师提高编程能力和提高理解分析问题的能力都是有帮助的,接下来放几道常见的前端面试中出现的算法题供大家学习,当然,这些题目的解法未必是最优的,仅供大家学习参考。
// 判断是否回文
var str = 'resiviser';
function reserve(str) {
return str === str.split('').reverse().join('');
}
// 数组去重
function unique(arr) {
const container = {};
const newArr = [];
for(let i = 0,len = arr.length;i < len; i++) {
if (!container[arr[i]]) {
container[arr[i]] = true;
newArr.push(arr[i]);
}
}
return newArr;
}
// 尾递归阶乘
function factorial(num) {
if(num <= 1) return 1;
return num * factorial(num - 1);
}
// 快速排序
function quickSort (arr) {
if (arr.length <= 1) return arr;
let middleIndex = Math.floor(arr.length/2);
let middle = arr.splice(middleIndex, 1)[0];
let left = [];
let right = [];
for(let i = 0,len = arr.length; i < len; i++){
if(arr[i] < middle) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
// console.log(left, right)
}
// console.log('------------')
return quickSort(left).concat([middle] ,quickSort(right));
}
console.log(quickSort([2,3,1,4,6,5,9,8]));
// 统计字符串出现次数最多的字母
function findMoreLetter(str) {
let container = {};
var maxValue = 0;
let maxKey = '';
str = str.split('');
for(let i = 0,len = str.length; i < len; i++) {
if(!container[str[i]]) {
container[str[i]] = 1;
} else {
++ container[str[i]];
}
}
Object.keys(container).forEach((key) => {
if (container[key] >= maxValue) {
maxValue = container[key];
maxKey = key;
}
});
return maxKey + '一共出现了' + maxValue;
}
console.log(findMoreLetter('asdfsasdasfas'));