前端面试常考算法标题详解

打印 上一主题 下一主题

主题 1632|帖子 1632|积分 4896

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
根据2025年最新前端面试趋势,结合腾讯、阿里等大厂真题,我为你整理了以下高频算法题型及JS实现方案:

一、数组/字符串处理

1. 两数之和(哈希表法)

标题:找出数组中两数之和等于目标值的索引
  1. const twoSum = (nums, target) => {
  2.     const map = new Map();
  3.     for (let i = 0; i < nums.length; i++) {
  4.         const complement = target - nums[i];
  5.         if (map.has(complement)) return [map.get(complement), i];
  6.         map.set(nums[i], i);  // 存储数值与索引的映射关系
  7.     }
  8. };
  9. // 时间复杂度O(n),空间复杂度O(n)
复制代码
2. 最长无重复子串(滑动窗口)

标题:求字符串中最长不重复字符的子串长度
  1. const lengthOfLongestSubstring = (s) => {
  2.     let map = new Map(), max = 0, left = 0;
  3.     for (let right = 0; right < s.length; right++) {
  4.         if (map.has(s[right])) left = Math.max(left, map.get(s[right]) + 1);
  5.         map.set(s[right], right);  // 更新字符最新位置
  6.         max = Math.max(max, right - left + 1);  // 窗口扩展时更新最大值
  7.     }
  8.     return max;
  9. };
  10. // 时间复杂度O(n),空间复杂度O(k)(k为字符集大小)
复制代码

二、排序算法

1. 快速排序(分治思想)

  1. const quickSort = (arr) => {
  2.     if (arr.length <= 1) return arr;
  3.     const pivot = arr.pop();
  4.     const left = arr.filter(x => x <= pivot);
  5.     const right = arr.filter(x => x > pivot);
  6.     return [...quickSort(left), pivot, ...quickSort(right)];  // 递归拆分左右数组
  7. };
  8. // 平均时间复杂度O(n log n),最坏O(n²)
复制代码
2. 冒泡排序(基础必考)

  1. function bubbleSort(arr) {
  2.     for (let i = 0; i < arr.length-1; i++) {
  3.         for (let j = 0; j < arr.length-1-i; j++) {
  4.             if (arr[j] > arr[j+1]) {
  5.                 [arr[j], arr[j+1]] = [arr[j+1], arr[j]];  // 相邻元素交换
  6.             }
  7.         }
  8.     }
  9.     return arr;
  10. }
  11. // 时间复杂度O(n²),空间复杂度O(1)
复制代码

三、链表操纵

1. 反转链表(迭代法)

  1. function reverseList(head) {
  2.     let prev = null, curr = head;
  3.     while (curr) {
  4.         const next = curr.next;  // 暂存后续节点
  5.         curr.next = prev;        // 反转指针方向
  6.         prev = curr;             // 前移prev指针
  7.         curr = next;             // 前移curr指针
  8.     }
  9.     return prev;
  10. };
  11. // 时间复杂度O(n),空间复杂度O(1)
复制代码
2. 合并有序链表(递归)

  1. const mergeTwoLists = (l1, l2) => {
  2.     if (!l1) return l2;
  3.     if (!l2) return l1;
  4.     if (l1.val < l2.val) {
  5.         l1.next = mergeTwoLists(l1.next, l2);
  6.         return l1;
  7.     } else {
  8.         l2.next = mergeTwoLists(l1, l2.next);
  9.         return l2;  // 递归拼接较小节点
  10.     }
  11. };
  12. // 时间复杂度O(m+n),空间复杂度O(m+n)
复制代码

四、动态规划

1. 爬楼梯标题(斐波那契变种)

  1. const climbStairs = (n) => {
  2.     let [a, b] = [1, 1];
  3.     for (let i = 2; i <= n; i++)
  4.         [a, b] = [b, a + b];  // 滚动数组优化空间
  5.     return b;
  6. };
  7. // 时间复杂度O(n),空间复杂度O(1)
复制代码
2. 最大子序和

  1. const maxSubArray = (nums) => {
  2.     let pre = 0, maxAns = nums;
  3.     nums.forEach(x => {
  4.         pre = Math.max(pre + x, x);  // 判断是否舍弃前面序列
  5.         maxAns = Math.max(maxAns, pre);
  6.     });
  7.     return maxAns;
  8. };
  9. // 时间复杂度O(n),空间复杂度O(1)
复制代码

五、设计类标题

1. 实现Promise.all

  1. Promise.myAll = (promises) => {
  2.     return new Promise((resolve, reject) => {
  3.         let results = [], count = 0;
  4.         promises.forEach((p, i) => {
  5.             p.then(res => {
  6.                 results[i] = res;
  7.                 if (++count === promises.length) resolve(results);  // 全部完成后返回
  8.             }).catch(reject);  // 任一失败立即终止
  9.         });
  10.     });
  11. };
复制代码
2. 节省函数(Throttle)

  1. function throttle(fn, delay) {
  2.     let last = 0;
  3.     return (...args) => {
  4.         const now = Date.now();
  5.         if (now - last < delay) return;
  6.         last = now;
  7.         fn.apply(this, args);  // 固定时间间隔触发
  8.     };
  9. }
复制代码

高频考点总结

类别考察重点常考题型示例数组双指针、哈希表应用两数之和、三数之和字符串滑动窗口、正则处理回文判断、字符串转换链表虚拟头节点、快慢指针环形链表检测、倒数第K个节点递归与迭代转换层序遍历、对称二叉树判断体系设计前端特定场景设计LRU缓存、发布订阅模式 练习建议:建议在LeetCode上重点练习「前端面试高频题库」标签下的标题,并注意边界条件处理(如空数组、单节点链表等特殊场景)。现实面试中,面试官常会要求手写代码后口述时间/空间复杂度及优化思绪。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

民工心事

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表