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

news2025/4/4 15:56:07

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


一、数组/字符串处理

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

问题:找出数组中两数之和等于目标值的索引

const twoSum = (nums, target) => {
    const map = new Map();
    for (let i = 0; i < nums.length; i++) {
        const complement = target - nums[i];
        if (map.has(complement)) return [map.get(complement), i];
        map.set(nums[i], i);  // 存储数值与索引的映射关系
    }
};
// 时间复杂度O(n),空间复杂度O(n)
2. 最长无重复子串(滑动窗口)

问题:求字符串中最长不重复字符的子串长度

const lengthOfLongestSubstring = (s) => {
    let map = new Map(), max = 0, left = 0;
    for (let right = 0; right < s.length; right++) {
        if (map.has(s[right])) left = Math.max(left, map.get(s[right]) + 1);
        map.set(s[right], right);  // 更新字符最新位置
        max = Math.max(max, right - left + 1);  // 窗口扩展时更新最大值
    }
    return max;
};
// 时间复杂度O(n),空间复杂度O(k)(k为字符集大小)

二、排序算法

1. 快速排序(分治思想)
const quickSort = (arr) => {
    if (arr.length <= 1) return arr;
    const pivot = arr.pop();
    const left = arr.filter(x => x <= pivot);
    const right = arr.filter(x => x > pivot);
    return [...quickSort(left), pivot, ...quickSort(right)];  // 递归拆分左右数组
};
// 平均时间复杂度O(n log n),最坏O(n²)
2. 冒泡排序(基础必考)
function bubbleSort(arr) {
    for (let i = 0; i < arr.length-1; i++) {
        for (let j = 0; j < arr.length-1-i; j++) {
            if (arr[j] > arr[j+1]) {
                [arr[j], arr[j+1]] = [arr[j+1], arr[j]];  // 相邻元素交换
            }
        }
    }
    return arr;
}
// 时间复杂度O(n²),空间复杂度O(1)

三、链表操作

1. 反转链表(迭代法)
function reverseList(head) {
    let prev = null, curr = head;
    while (curr) {
        const next = curr.next;  // 暂存后续节点
        curr.next = prev;        // 反转指针方向
        prev = curr;             // 前移prev指针
        curr = next;             // 前移curr指针
    }
    return prev;
};
// 时间复杂度O(n),空间复杂度O(1)
2. 合并有序链表(递归)
const mergeTwoLists = (l1, l2) => {
    if (!l1) return l2;
    if (!l2) return l1;
    if (l1.val < l2.val) {
        l1.next = mergeTwoLists(l1.next, l2);
        return l1;
    } else {
        l2.next = mergeTwoLists(l1, l2.next);
        return l2;  // 递归拼接较小节点
    }
};
// 时间复杂度O(m+n),空间复杂度O(m+n)

四、动态规划

1. 爬楼梯问题(斐波那契变种)
const climbStairs = (n) => {
    let [a, b] = [1, 1];
    for (let i = 2; i <= n; i++) 
        [a, b] = [b, a + b];  // 滚动数组优化空间
    return b;
};
// 时间复杂度O(n),空间复杂度O(1)
2. 最大子序和
const maxSubArray = (nums) => {
    let pre = 0, maxAns = nums;
    nums.forEach(x => {
        pre = Math.max(pre + x, x);  // 判断是否舍弃前面序列
        maxAns = Math.max(maxAns, pre);
    });
    return maxAns;
};
// 时间复杂度O(n),空间复杂度O(1)

五、设计类问题

1. 实现Promise.all
Promise.myAll = (promises) => {
    return new Promise((resolve, reject) => {
        let results = [], count = 0;
        promises.forEach((p, i) => {
            p.then(res => {
                results[i] = res;
                if (++count === promises.length) resolve(results);  // 全部完成后返回
            }).catch(reject);  // 任一失败立即终止
        });
    });
};
2. 节流函数(Throttle)
function throttle(fn, delay) {
    let last = 0;
    return (...args) => {
        const now = Date.now();
        if (now - last < delay) return;
        last = now;
        fn.apply(this, args);  // 固定时间间隔触发
    };
}

高频考点总结

类别考察重点常考题型示例
数组双指针、哈希表应用两数之和、三数之和
字符串滑动窗口、正则处理回文判断、字符串转换
链表虚拟头节点、快慢指针环形链表检测、倒数第K个节点
递归与迭代转换层序遍历、对称二叉树判断
系统设计前端特定场景设计LRU缓存、发布订阅模式

练习建议:建议在LeetCode上重点练习「前端面试高频题库」标签下的题目,并注意边界条件处理(如空数组、单节点链表等特殊场景)。实际面试中,面试官常会要求手写代码后口述时间/空间复杂度及优化思路。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2327289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三轴云台之相机技术篇

一、结构设计 三轴云台通常由空间上三个互相垂直的框架构成&#xff0c;包括内框&#xff08;俯仰框&#xff09;、中框&#xff08;方位框&#xff09;和外框&#xff08;横滚框&#xff09;。这些框架分别负责控制相机的俯仰运动、方位运动和横滚运动&#xff0c;从而实现对目…

Bugku-再也没有纯白的灵魂

下载文件发现是兽音先用https://roar.iiilab.com/加密flag 得到“~呜嗷嗷嗷嗷呜啊嗷啊呜呜嗷呜呜~嗷嗷~啊嗷啊呜嗷嗷~嗷~嗷~呜呜嗷呜啊啊”&#xff0c;与密文对比对比发现字段少个啊&#xff0c;并且B对应嗷&#xff0c;U对应呜&#xff0c;G对应啊&#xff0c;K对应~补充啊后…

多模态大语言模型arxiv论文略读(一)

Does Transliteration Help Multilingual Language Modeling? ➡️ 论文标题&#xff1a;Does Transliteration Help Multilingual Language Modeling? ➡️ 论文作者&#xff1a;Ibraheem Muhammad Moosa, Mahmud Elahi Akhter, Ashfia Binte Habib ➡️ 研究机构: Pennsyl…

单元测试原则之——不要模拟不属于你的类型

在单元测试中,不要模拟不属于你的类型(Don’t mock types you don’t own)是一个重要的原则。这是因为外部库或框架的类型(如第三方依赖)可能会在未来的版本中发生变化,而你的模拟可能无法反映这些变化,从而导致测试失效。 以下是一个基于Java Mockito 的示例,展示如何…

算法与数据结构面试题

算法与数据结构面试题 加油&#xff01; 考查数据结构本身 什么是数据结构 简单地说&#xff0c;数据结构是以某种特定的布局方式存储数据的容器。这种“布局方式”决定了数据结构对于某些操作是高效的&#xff0c;而对于其他操作则是低效的。首先我们需要理解各种数据结构&a…

边缘检测技术现状初探2:多尺度与形态学方法

一、多尺度边缘检测方法 多尺度边缘检测通过在不同分辨率/平滑度下分析图像&#xff0c;实现&#xff1a; 粗尺度&#xff08;大σ值&#xff09;&#xff1a;抑制噪声&#xff0c;提取主体轮廓细尺度&#xff08;小σ值&#xff09;&#xff1a;保留细节&#xff0c;检测微观…

【AI News | 20250402】每日AI进展

AI Repos 1、Dolphin 由数据海洋AI与清华大学联合研发的Dolphin多任务语音识别模型正式亮相。该模型覆盖东亚、南亚、东南亚及中东地区40余种语言&#xff0c;并支持22种汉语方言&#xff0c;训练数据量超21万小时&#xff08;含自有及开源数据&#xff09;&#xff0c;具备语…

操作系统高频(七)虚拟地址与页表

操作系统高频&#xff08;六&#xff09;虚拟地址与页表 1.什么是文件系统&#xff1f;它的作用是什么&#xff1f;⭐ 存储管理&#xff1a;文件系统负责管理计算机的存储设备&#xff0c;如硬盘、固态硬盘等。它将文件存储在这些设备上&#xff0c;并负责分配和回收存储空间…

openEuler24.03 LTS下安装Flume

目录 前提条件 下载Flume 解压 设置环境变量 修改日志文件 测试Flume 在node2安装Flume 前提条件 Linux安装好jdk Flume一般需要配合Hadoop使用&#xff0c;安装好Hadoop完全分布式集群&#xff0c;可参考&#xff1a;openEuler24.03 LTS下安装Hadoop3完全分布式 下载F…

现代几何风格网页标牌标识logo海报标题设计psai英文字体安装包 Myfonts – Gilroy Font Family

Gilroy 是一款具有几何风格的现代无衬线字体。它是原始 Qanelas 字体系列的弟弟。它有 20 种粗细、10 种直立字体和与之匹配的斜体。Light 和 ExtraBold 粗细是免费的&#xff0c;因此您可以随心所欲地使用它们。设计时考虑到了强大的 opentype 功能。每种粗细都包括扩展语言支…

ControlNet-Tile详解

一、模型功能与应用 1. 模型功能 ControlNet-Tile模型的主要功能是图像的细节增强和质量提升。它通过以下几个步骤实现这一目标&#xff1a; 语义分割&#xff1a;模型首先对输入的图像进行语义分割&#xff0c;识别出图像中不同的区域和对象。这一步是为了让模型理解图像的内…

leetcode 2873. 有序三元组中的最大值 I

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 文章目录 题目描述题目剖析&信息挖掘解题思路方法一 暴力枚举法思路注意复杂度代码实现 方法二 公式拆分动态规划思路注意复杂度代码实现 题目描述 [2873] 有序三元…

RabbitMQ应用2

RabbitMQ应用2 一.实际业务逻辑订单系统中使用MQ&#xff08;不写订单系统逻辑&#xff09;1.项目的创建和准备2.代码实现ControllerConfigurationproperties 二.物流系统使用MQ&#xff08;不实现物流系统业务&#xff09;1.项目创建同订单&#xff08;一样&#xff09;2.代码…

Windows 实战-evtx 文件分析--笔记

Windows 取证之EVTX日志 - 蚁景网安实验室 - 博客园 一.evtx日志文件是什么 从 Windows NT 6.0&#xff08;也就是 Windows Vista 和 Windows Server 2008&#xff09;开始&#xff0c;微软引入了一种全新的日志文件格式&#xff0c;称为 evtx。这种格式取代了之前 Windows 系…

【postgresql】锁概览

常规锁 场景测试案例

子组件使用:visible.sync=“visible“进行双向的绑定导致该弹窗与其他弹窗同时显示的问题

问题描述&#xff1a;最近写代码时遇到了一个问题&#xff1a;点击A弹窗后关闭&#xff0c;继续点击B弹窗&#xff0c;这时会同时弹窗A、B两个弹窗。经过排查后发现在子组件定义时使用了:visible.sync"visible"属性进行双向的数据绑定 <template> <el-dial…

【AI产品分享】面向图片的原始位置翻译功能

1. 背景 在撰写文字材料时&#xff0c;往往需要配套图像以增强表达效果。然而&#xff0c;有时自己绘制的图可能达不到理想的质量&#xff0c;而在其他文献材料中却能发现更清晰、直观的示例。希望在“站在巨人的肩膀上”优化自己的图像时&#xff0c;通常希望在保留原始图像的…

【无标题】跨网段耦合器解决欧姆龙CJ系列PLC通讯问题案例

欧姆龙CJ系列PLC不同网段的通讯问题 一、项目背景 某大型制造企业的生产车间内&#xff0c;采用了多台欧姆龙CJ系列PLC对生产设备进行控制。随着企业智能化改造的推进&#xff0c;需要将这些PLC接入工厂的工业以太网&#xff0c;以便实现生产数据的实时采集、远程监控以及与企业…

K8S学习之基础七十二:Ingress基于Https代理pod

Ingress基于Https代理pod 1、构建TLS站点 &#xff08;1&#xff09;准备证书&#xff0c;在xianchaomaster1节点操作 cd /root/ openssl genrsa -out tls.key 2048 openssl req -new -x509 -key tls.key -out tls.crt -subj /CCN/STBeijing/LBeijing/ODevOps/CNak.lucky.com…

node.js版本管理

概述 遇到了版本升级后&#xff0c;以前项目不兼容的问题。 下载一个node.js的版本管理工具&#xff0c;官网下载地址&#xff0c;可以选择版本下载&#xff0c;我选择的1.11.1版本的。下载完成后点击安装&#xff0c;分别选择nvm安装目录和nodejs的安装目录&#xff0c;点击安…