【高频】前端面试算法题,案例+答案,一学就会!

目录

前言

题目

1. 反转字符串

2. 判断回文字符串

3. 数组去重

4.找出最大值和最小值

5. 斐波那契数列

6. 查找缺失的数字

7. 判断两个字符串是否是字母异位词

8. 实现数组扁平化

9. 实现字符串压缩

10. 判断是否为无序数组中的连续数字

总结


前言

虽然前端开发工作更加注重对HTML、CSS和JavaScript等技术的掌握,但算法和数据结构也是前端工程师应该具备的基本能力之一。很多公司的面试也会有算法这一环节。今天为大家总结了一些最常见的算法题。开始算法入门吧!

题目

1. 反转字符串

题目要求:编写一个函数,将输入的字符串反转。

示例:

输入:"Hello, World!"

输出:"!dlroW ,olleH"

function reverseString(str) {
  return str.split('').reverse().join('');
}

2. 判断回文字符串

题目要求:编写一个函数,判断输入的字符串是否是回文字符串(正读和反读都一样)。

示例:

输入:"level"

输出:true

function isPalindrome(str) {
  const reversed = str.split('').reverse().join('');
  return str === reversed;
}

3. 数组去重

题目要求:编写一个函数,将输入的数组中重复的元素去除。

示例: 输入:[1, 2, 3, 3, 4, 4, 5]

输出:[1, 2, 3, 4, 5]

function removeDuplicates(arr) {
  return Array.from(new Set(arr));
}

4.找出最大值和最小值

题目要求:编写一个函数,找出输入数组中的最大值和最小值。

示例:

输入:[3, 1, 9, 6, 2, 5]

输出:最大值为 9,最小值为 1

function findMinMax(arr) {
  const min = Math.min(...arr);
  const max = Math.max(...arr);
  return { min, max };
}

5. 斐波那契数列

题目要求:编写一个函数,输入一个数字 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;
}

6. 查找缺失的数字

题目要求:给定一个包含从 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;
}

7. 判断两个字符串是否是字母异位词

题目要求:给定两个字符串,判断它们是否是字母异位词(由相同的字母重排而成)。

示例:

输入:'listen', 'silent'

输出:true

function isAnagram(str1, str2) {
  const sortedStr1 = str1.split('').sort().join('');
  const sortedStr2 = str2.split('').sort().join('');
  return sortedStr1 === sortedStr2;
}

8. 实现数组扁平化

题目要求:编写一个函数,将嵌套的多维数组扁平化为一维数组。不能使用数组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;
  }, []);
}

9. 实现字符串压缩

题目要求:给定一个字符串,编写一个函数将其进行压缩,使得相同字符连续出现的次数大于等于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;
}

10. 判断是否为无序数组中的连续数字

题目要求:给定一个无序整数数组,编写一个函数判断数组中的元素是否可以组成连续数字序列。

示例:

输入:[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;
}

总结

算法题不仅考察了面试者的编程能力和解决问题的能力,还体现了面试者对基本计算机科学原理的掌握程度。因此,在准备前端面试时,合理安排时间学习算法和数据结构,并通过练习算法题提升自己的能力,将会为面试增加更多的竞争力。

你可能感兴趣的:(前端面试,算法,面试,算法,职场和发展)