在前端开发领域,扎实的算法基础不仅能提升代码质量,还能在面试中大放异彩。本文将精选10道前端开发者常见的算法题,并附上详细的解析,帮助你巩固算法知识,提高问题解决能力。
1. 数组扁平化
题目:给定一个可能包含多层嵌套数组的数组,将其转化为一维数组。
示例:
Javascript
深色版本
1const arr = [1, [2, [3, 4], 5], 6];
2// 应输出: [1, 2, 3, 4, 5, 6]
解析:使用递归来处理嵌套数组。
Javascript
深色版本
1function flattenArray(arr) {
2 return arr.reduce((acc, val) =>
3 Array.isArray(val) ? acc.concat(flattenArray(val)) : acc.concat(val), []);
4}
2. 字符串反转
题目:实现一个函数,输入一个字符串,返回其反转后的字符串。
示例:
Javascript
深色版本
1const str = "hello";
2// 应输出: "olleh"
解析:将字符串转为数组,使用数组的reverse()
方法,再转回字符串。
Javascript
深色版本
1function reverseString(s) {
2 return s.split('').reverse().join('');
3}
3. 数组去重
题目:给定一个数组,返回一个去重后的数组。
示例:
Javascript
深色版本
1const arr = [1, 2, 2, 3, 4, 4];
2// 应输出: [1, 2, 3, 4]
解析:使用Set
数据结构。
Javascript
深色版本
1function uniqueArray(arr) {
2 return [...new Set(arr)];
3}
4. 查找数组中的最大值
题目:给定一个数组,找出并返回其中的最大值。
示例:
Javascript
深色版本
1const arr = [1, 5, 3, 9, 2];
2// 应输出: 9
解析:使用Math.max()
结合apply()
方法。
Javascript
深色版本
1function findMax(arr) {
2 return Math.max.apply(null, arr);
3}
5. 计算字符串中字符出现次数
题目:给定一个字符串,计算每个字符出现的次数。
示例:
Javascript
深色版本
1const str = "hello";
2// 应输出: { h: 1, e: 1, l: 2, o: 1 }
解析:遍历字符串,使用对象记录每个字符的计数。
Javascript
深色版本
1function charCount(str) {
2 const count = {};
3 for (let char of str) {
4 count[char] = (count[char] || 0) + 1;
5 }
6 return count;
7}
6. 两数之和
题目:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
示例:
Javascript
深色版本
1const nums = [2, 7, 11, 15];
2const target = 9;
3// 应输出: [0, 1]
解析:使用哈希表优化查找。
Javascript
深色版本
1function twoSum(nums, target) {
2 const map = {};
3 for (let i = 0; i < nums.length; i++) {
4 const complement = target - nums[i];
5 if (map[complement] !== undefined) {
6 return [map[complement], i];
7 }
8 map[nums[i]] = i;
9 }
10 return [];
11}
7. 字符串匹配
题目:给定一个字符串和一个模式,检查模式是否存在于字符串中。
示例:
Javascript
深色版本
1const str = "hello";
2const pattern = "he";
3// 应输出: true
解析:使用indexOf()
方法。
Javascript
深色版本
1function isMatch(str, pattern) {
2 return str.indexOf(pattern) !== -1;
3}
8. 斐波那契数列
题目:计算斐波那契数列的第n项。
示例:
Javascript
深色版本
1const n = 6;
2// 应输出: 8
解析:使用递归或循环。
Javascript
深色版本
1function fibonacci(n) {
2 if (n <= 1) return n;
3 let prev = 0, curr = 1;
4 for (let i = 2; i <= n; i++) {
5 let next = prev + curr;
6 prev = curr;
7 curr = next;
8 }
9 return curr;
10}
9. 深拷贝
题目:实现一个函数,能够对一个对象进行深度拷贝。
示例:
Javascript
深色版本
1const obj = { a: 1, b: { c: 2 } };
2// 应输出: { a: 1, b: { c: 2 } }
解析:递归拷贝对象和数组。
Javascript
深色版本
1function deepCopy(obj) {
2 if (typeof obj !== 'object' || obj === null) return obj;
3 let copy = Array.isArray(obj) ? [] : {};
4 for (let key in obj) {
5 if (obj.hasOwnProperty(key)) {
6 copy[key] = deepCopy(obj[key]);
7 }
8 }
9 return copy;
10}
10. 字符串转数字
题目:将一个表示数字的字符串转换成数字。
示例:
Javascript
深色版本
1const str = "123";
2// 应输出: 123
解析:使用parseInt()
或Number()
函数。
Javascript
深色版本
1function stringToNumber(str) {
2 return parseInt(str, 10);
3}
结语
算法是编程的基石,对于前端开发者而言,熟练掌握这些基本算法不仅能够提升代码质量和效率,还能在面试中脱颖而出。希望上述题目和解析能够帮助你更好地理解和掌握前端算法,为你的编程之路增添助力。