目录
前言
题目
1. 反转字符串
2. 判断回文字符串
3. 数组去重
4.找出最大值和最小值
5. 斐波那契数列
6. 查找缺失的数字
7. 判断两个字符串是否是字母异位词
8. 实现数组扁平化
9. 实现字符串压缩
10. 判断是否为无序数组中的连续数字
总结
虽然前端开发工作更加注重对HTML、CSS和JavaScript等技术的掌握,但算法和数据结构也是前端工程师应该具备的基本能力之一。很多公司的面试也会有算法这一环节。今天为大家总结了一些最常见的算法题。开始算法入门吧!
题目要求:编写一个函数,将输入的字符串反转。
示例:
输入:"Hello, World!"
输出:"!dlroW ,olleH"
function reverseString(str) {
return str.split('').reverse().join('');
}
题目要求:编写一个函数,判断输入的字符串是否是回文字符串(正读和反读都一样)。
示例:
输入:"level"
输出:true
function isPalindrome(str) {
const reversed = str.split('').reverse().join('');
return str === reversed;
}
题目要求:编写一个函数,将输入的数组中重复的元素去除。
示例: 输入:[1, 2, 3, 3, 4, 4, 5]
输出:[1, 2, 3, 4, 5]
function removeDuplicates(arr) {
return Array.from(new Set(arr));
}
题目要求:编写一个函数,找出输入数组中的最大值和最小值。
示例:
输入:[3, 1, 9, 6, 2, 5]
输出:最大值为 9,最小值为 1
function findMinMax(arr) {
const min = Math.min(...arr);
const max = Math.max(...arr);
return { min, max };
}
题目要求:编写一个函数,输入一个数字 n,返回斐波那契数列中第 n 个数字的值。
示例:
输入:6
输出:8(斐波那契数列为 0, 1, 1, 2, 3, 5, 8, ...)
function fibonacci(n) {
if (n <= 1) {
return n;
}
let a = 0;
let b = 1;
for (let i = 2; i <= n; i++) {
const temp = a + b;
a = b;
b = temp;
}
return b;
}
题目要求:给定一个包含从 1 到 n 的无序整数数组,其中一个数字缺失了,请编写一个函数找出缺失的数字。
示例:
输入:[4, 2, 1, 6, 5]
输出:3
function findMissingNumber(arr) {
const n = arr.length + 1;
const totalSum = (n * (n + 1)) / 2;
const actualSum = arr.reduce((sum, num) => sum + num, 0);
return totalSum - actualSum;
}
题目要求:给定两个字符串,判断它们是否是字母异位词(由相同的字母重排而成)。
示例:
输入:'listen', 'silent'
输出:true
function isAnagram(str1, str2) {
const sortedStr1 = str1.split('').sort().join('');
const sortedStr2 = str2.split('').sort().join('');
return sortedStr1 === sortedStr2;
}
题目要求:编写一个函数,将嵌套的多维数组扁平化为一维数组。不能使用数组flat方法。
示例:
输入:[1, [2, [3, 4], 5], 6]
输出:[1, 2, 3, 4, 5, 6]
function flattenArray(arr) {
return arr.reduce((result, current) => {
if (Array.isArray(current)) {
result.push(...flattenArray(current));
} else {
result.push(current);
}
return result;
}, []);
}
题目要求:给定一个字符串,编写一个函数将其进行压缩,使得相同字符连续出现的次数大于等于2时,将字符和其出现次数连在一起。
示例:
输入:"aabbbbccdd"
输出:"a2b4c2d2"
function compressString(str) {
let compressed = '';
let count = 1;
for (let i = 0; i < str.length; i++) {
if (str[i] === str[i + 1]) {
count++;
} else {
compressed += str[i] + count;
count = 1;
}
}
return compressed;
}
题目要求:给定一个无序整数数组,编写一个函数判断数组中的元素是否可以组成连续数字序列。
示例:
输入:[5, 3, 2, 6, 4]
输出:true(数组中的元素 2、3、4、5、6 可以组成连续数字序列)
function isConsecutive(arr) {
const sortedArr = arr.sort((a, b) => a - b);
for (let i = 1; i < sortedArr.length; i++) {
if (sortedArr[i] !== sortedArr[i - 1] + 1) {
return false;
}
}
return true;
}
算法题不仅考察了面试者的编程能力和解决问题的能力,还体现了面试者对基本计算机科学原理的掌握程度。因此,在准备前端面试时,合理安排时间学习算法和数据结构,并通过练习算法题提升自己的能力,将会为面试增加更多的竞争力。