当前位置: 首页 > news >正文

前端面试经典算法题

前言

现在面试流行考核算法,做过面试官,也被面试。问算法对面试官来说,是一种解脱,找出了一个看似很高明且能偷懒的办法选择人,避免了不知道问啥的尴尬;被面试者,也找到了一种新的面试八股文,刷就对了;算法题让面试与被面试找到了一种平衡。

在实际的开发中,很多被考核的算法确实没啥卵用,面试者要认真琢磨考什么?下面是作者本人经历的一些面试题,有字节、腾讯、百度、滴滴的,仅供参考。

字符串插值

考察正则表达式、数组、字符串操作

// 字符串插值;
const data1 = {asd: {ddd: ["bbb"],},
};
const data2 = {ccc: 666,
};
const template = (str, data) => {// 正则匹配// ${data.asd.ddd.0}const reg = /${(.+[^}])}/g;const tempStr = str.match(reg)[0].replace("${data.", "").replace("}", "");console.log(tempStr);let arr = tempStr.split(".");// 第0个赋值let resTemp = data[arr[0]];// 遍历查询for (let i = 1; i < arr.length; i++) {if (resTemp[arr[i]]) {resTemp = resTemp[arr[i]];} else {resTemp = undefined;}}let res = resTemp;// 数组转换if (res !== undefined) {res = Array.from(new Set(resTemp.split(""))).join("");}return str.replace(reg, res);
};console.log(template("pre_${data.asd.ddd.0}_tail", data1));// pre_b_tail;// console.log(template("pre_${data.ccc}_tail", data2));// pre_666_tail;

将一组区间中所有重叠的区间进行合并

例如 // 输入:[[1,3],[2,6],[10,15],[9,11],[1,3]] // 输出:[ [ 1, 6 ], [ 9, 15 ] ]

不知道考核什么,可能是考核逻辑(需要脑子清醒的时候面~)

function mergeArr(arr) {//   arr = Array.from(new Set(arr));//   console.log(arr);//   arr = ar.map((item) => {});const res = [arr[0]];for (let i = 1; i < arr.length; i++) {const ele1 = arr[i];let count = 0;for (let j = 0; j < res.length; j++) {const ele2 = res[j];if (ele1[0] >= ele2[0] && ele1[0] <= ele2[1] && ele1[1] >= ele2[1]) {ele2[1] = ele1[1];} else if (ele1[1] >= ele2[0] &&ele1[1] <= ele2[1] &&ele1[0] <= ele2[0]) {ele2[0] = ele1[0];} else {count++;}}if (count === res.length) {res.push(ele1);}}console.log(res);return res;
}mergeArr([[1, 3],[2, 6],[10, 15],[9, 11],[1, 3],
]);

b中存在多少个a中的字符串

考核的是Map用法

// a生成has map,查询b的字符串是否存在map中
function str(a, b) {const map = new Map();let res = 0;// a转为mapfor (let i = 0; i < a.length; i++) {map.set(a[i], 0);}// 对b进行遍历,查看map中是否存在b[j]for (let j = 0; j < b.length; j++) {if (map.has(b[j])) {res++;// map.set(b[j], map.get(b[j] + 1));}}return res;
}const J = "aA";
const S = "aAAbbbbb";console.log(str(J, S));

考察十进制转二进制

/**************** 题目***********/
// 输⼊: 5
// 输出: 2
// 解释: 5 的⼆进制表示为 101(没有前导零位),其补数为 010。所以你需要输出 2 。// 输⼊: 1
// 输出: 0
// 解释: 1 的⼆进制表示为 1(没有前导零位),其补数为 0。所以你需要输出 0 。
/**************** 题目***********/// 字符串使用索引只能读不能改
// replace方法只能不修改字符串本身
// 二进制 十进制转换function fn(n) {let str = parseInt(n).toString(2);if (str[0] === "1") {str = "0" + str.slice(0, str.length - 1);} else {str = "1" + str.slice(0, str.length - 1);}return parseInt(str, 2);
}
console.log(fn(5));// 有符号右位移;
function fn2(n) {return n >> 1;
}
console.log(fn2(5));

首个不重复字符索引

// 首个不重复字符串索引
function fn(str) {const map = new Map();for (let i = 0; i < str.length; i++) {if (map.has(str[i])) {map.set(str[i], 1);} else {map.set(str[i], 0);}}for (let i = 0; i < str.length; i++) {if (map.get(str[i]) === 0) {return i;}}return -1;
}console.log(fn("loveleetcode"));

数组排序

function fn(arr1, arr2) {let temp = 0;let res = arr2;while (arr1.length) {const num = arr1.shift();for (let i = temp; i < arr2.length; i++) {if (num <= arr2[i]) {// res = [num].concat(res);res.splice(i, 0, arr2[i]);temp = i;break;}}}console.log(res);return res;
}fn([1, 3, 4], [1, 2, 3, 4, 5]);

数组中两个数的和

// 数组加和
function fn(arr, target) {const len = arr.len;const res = [];const map = new Map();arr.forEach((item) => {const temp = target - item;if (map.has(temp)) {res.push([item, map.get(temp)]);}map.set(item, item);});console.log(res);return res;
}const arr = [15, 2, 7, 3, 11, 1];
const target = 18;
fn(arr, target);// 输出[(3, 15)][(7, 11)];

n 个有序数组,求第m大的数

// n 个有序数组,求第m大的数
function fn(arr, m) {// 数组合并for (let i = 0; i < arr.length - 1; i++) {const arr1 = arr[i];const arr2 = arr[i + 1];while (arr1.length) {const n = arr1.shift();for (let j = 0; j < arr2.length; j++) {if (n <= arr2[j]) {arr2.splice(j, 0, n);break;}}}}console.log(arr[arr.length - 1], arr[arr.length - 1][m - 1]);return arr[arr.length - 1][m - 1];
}fn([[1, 2, 3],[2, 3, 5],],3
);

无序数组。有正有负,求和最大的子数组

// 无序数组。有正有负,求和最大的子数组function fn(arr) {// 子数组const len = arr.length;arr = arr.map((item) => {if (item >= 0) return item;});console.log(arr);const subArr = [];const backtrack = (path, l) => {if (path.length === l) {subArr.push(path);return;}for (let i = 0; i < len; i++) {if (path.includes(arr[i])) continue;backtrack(path.concat([arr[i]]), l);}};for (let i = 1; i <= len; i++) {backtrack([], i);}subArr.sort((a, b) => {// console.log(a);const aSum = a.reduce((p, n) => p + n);const bSum = b.reduce((p, n) => p + n);return bSum - aSum;});console.log(subArr[0]);return subArr[0];//     for (let n = 0; n < subArr.length; n++) {//         const mid = Math.floor(subArr.length / 2)//   }// 和比较
}fn([1, 2, -3]);

闭包&函数的toString方法

// add(1)(2)(3) 6
// add(1)(2)(3)(4) 10function add() {// 保存变量let arg = [].slice.call(arguments);// 加和计算function _adder() {const _arg = [].slice.call(arguments);arg.push(..._arg);console.log(_arg);_adder.toString = function() {const res = arg.reduce((previous, current) => {return previous + current;});return res;};return _adder;}return _adder;
}const a = add(1, 2)(3);
console.log(a + 1);

字符串的随机组合

// 字符串的随机组合// 回溯算法function randomStr(str) {const res = [];const backtrack = (path) => {if (path.length === str.length) {res.push(path);return;}for (let i = 0; i < str.length; i++) {if (path.includes(str[i])) continue;backtrack(path + str[i]);}};backtrack("", 0);console.log(res);return res;
}randomStr("abc");

平衡二叉树

// 平衡二叉树function isBalanced(root) {if (!root) return true;const rec = (root) => {if (!root) return true;const left = root.left;const right = root.right;const leftValue = rec(left);const rightValue = rec(right);if (leftValue.left === null &&leftValue.right === null &&(rightValue.right.right || rightValue.right.left)) {return false;}if (rightValue.left === null &&rightValue.right === null &&(rightValue.right.right || rightValue.right.left)) {return false;}};rec(root);
}console.log(isBalanced(bt));

大数阶乘算法

因为数大,js是存不下的,因此就把计算结果拆解存数组里面,原理就是把计算的各个位的值存起来。

function fn(n){let a = [1]for(let i = 1; i <= n; i++) {// res*=ifor(let j = 0, c = 0; j < a.length || c != 0; j++){const m = (j < a.length) ? (i * a[j] + c) : ca[j] = m % 10c = (m - a[j])/10}}return a.reverse().join('')
}
console.log(fn(1005));

相关文章:

前端面试经典算法题

前言 现在面试流行考核算法&#xff0c;做过面试官&#xff0c;也被面试。问算法对面试官来说&#xff0c;是一种解脱&#xff0c;找出了一个看似很高明且能偷懒的办法选择人&#xff0c;避免了不知道问啥的尴尬&#xff1b;被面试者&#xff0c;也找到了一种新的面试八股文&am…...

ospf减少LSA更新

实验及实验要求 一、思路 1.根据区域划分IP地址 2.使公网可通---写缺省 3.使R3成为MGRE中心站点&#xff0c;R5、R6、R7为分支站点 4.一个个去配置ospf区域和RIP区域&#xff0c;确保每个区域配置无误 5.区域0要更改OSPF在接口的工作类型为broadcast &#xff0c;并使R3为…...

万字长文解析深度学习中的术语

引言 新手在学习深度学习或者在看深度学习论文的过程中&#xff0c;有不少专业词汇&#xff0c;软件翻译不出来&#xff0c;就算是翻译出来也看不懂&#xff0c;因为不少术语是借用其他学科的概念&#xff0c;这里整理了一些在深度学习中常见的术语&#xff0c;并对一些概念进…...

冠达管理投资前瞻:三星加码机器人领域 大信创建设提速

上星期五&#xff0c;沪指高开高走&#xff0c;盘中一度涨超1%打破3300点&#xff0c;但随后涨幅收窄&#xff1b;深成指、创业板指亦强势震动。截至收盘&#xff0c;沪指涨0.23%报3288.08点&#xff0c;深成指涨0.67%报11238.06点&#xff0c;创业板指涨0.95%报2263.37点&…...

24届近5年上海交通大学自动化考研院校分析

今天给大家带来的是上海交通大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、上海交通大学 学校简介 上海交通大学是我国历史最悠久、享誉海内外的高等学府之一&#xff0c;是教育部直属并与上海市共建的全国重点大学。经过120多年的不懈努力&#xff0c;上海交…...

【PDF密码】PDF文件不能打印,为什么?

正常的PDF文件是可以打印的&#xff0c;如果PDF文件打开之后发现文件不能打印&#xff0c;我们需要先查看一下自己的打印机是否能够正常运行&#xff0c;如果打印机是正常的&#xff0c;我们再查看一下&#xff0c;文件中的打印功能按钮是否是灰色的状态。 如果PDF中的大多数功…...

LeetCode-Java(03)

9. 回文数 class Solution {public boolean isPalindrome(int x) {if (x < 0 || (x % 10 0 && x ! 0)) {return false;}int revertedNumber 0;while (x > revertedNumber) {revertedNumber revertedNumber * 10 x % 10;x / 10;}// 当长度为奇数时通过reverte…...

【Linux命令行与Shell脚本编程】第十六章 Shell函数

Linux命令行与Shell脚本编程 第一章 文章目录 Linux命令行与Shell脚本编程六.函数6.1.脚本函数基础6.1.1.创建函数6.1.2.使用函数 6.2.函数返回值6.2.1.默认的退出状态码6.2.2.使用return命令6.2.3.使用函数输出 6.3.函数中使用变量6.3.1.向函数传递参数6.3.2.在函数中处理变量…...

SpringCloud-Hystrix服务熔断与降级工作原理源码 | 京东物流技术团队

先附上Hystrix源码图 在微服务架构中&#xff0c;根据业务来拆分成一个个的服务&#xff0c;服务与服务之间可以相互调用&#xff08;RPC&#xff09;&#xff0c;在Spring Cloud可以用RestTemplateRibbon和Feign来调用。为了保证其高可用&#xff0c;单个服务通常会集群部署。…...

(一)react脚手架

1. react脚手架 react提供了一个用于创建react项目的脚手架库&#xff1a;create-react-app 项目的整体技术架构为&#xff1a;react webpack es6 eslint 使用脚手架开发的项目的特点&#xff1a;模块化、组件化、工程化 2. 创建项目并启动 # 第一步&#xff1a; 全局安…...

Typescript中的元组与数组的区别

Typescript中的元组与数组的区别 元组可以应用在经纬度这样明确固定长度和类型的场景下 //元组和数组类似&#xff0c;但是类型注解时会不一样//元组赋值的类型、位置、个数需要和定义的类型、位置、个数完全一致&#xff0c;不然会报错。 // 数组 某个位置的值可以是注解中的…...

SpringBoot的index首页的访问、自定义Favicon图标

目录 1. index首页1.1 index首页访问规则的源码1.2 index首页的访问 2. 自定义Favicon图标 1. index首页 1.1 index首页访问规则的源码 package org.springframework.boot.autoconfigure.web.servlet; ......省略部分......// SpringBoot给容器中放WebMvcConfigurationSuppor…...

【C++】C++文件操作-文本文件/二进制文件

0.前言 一、文本文件 1.写文件 代码 #include <iostream> using namespace std; #include <fstream> //头文件包含//************************************** //文本文件 写文件 void test01() {//1.包含文件 fstream//2.创建流对象ofstream ofs;//3.指导打开方式…...

java通过http网络url下载文件

Testpublic void test3() throws ParseException {String fileUrl "http://*****/123.pdf";String savePath "C:\\Users\\HHH\\Desktop\\文件\\123.pdf";try {URL url new URL(fileUrl);InputStream inputStream url.openStream();Path outputPath Pa…...

网络安全【黑客】自学

1.什么是网络安全&#xff1f; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有…...

PCA和自动编码器:每个人都能理解的算法

一、说明 本文的主要重点是提供主成分分析 &#xff08;PCA&#xff09; 和自动编码器数据转换技术的直观信息。我不打算深入研究支撑这些模型的数学理论&#xff0c;因为已经有大量的资源可用。 二、pca降维和自编码 2.1 pca和自编码的共同点 自动编码器通过组合数据最重要的特…...

C++——STL容器【priority_queue】模拟实现

本章代码&#xff1a;优先级队列模拟实现、priority_queue文档 文章目录 &#x1f408;1. priority_queue介绍&#x1f984;2. priority_queue模拟实现&#x1f427;2.1 构造函数&#x1f427;2.2 建堆向下调整向上调整 &#x1f427;2.3 仿函数&#x1f427;2.4 push & po…...

SpringBoot实现文件记录日志,日志文件自动归档和压缩

&#x1f60a; 作者&#xff1a; Eric &#x1f496; 主页&#xff1a; https://blog.csdn.net/weixin_47316183?typeblog &#x1f389; 主题&#xff1a;SpringBoot实现文件记录日志&#xff0c;日志文件自动归档和压缩 ⏱️ 创作时间&#xff1a; 2023年08月06日 文章目…...

MySQL 窗口函数

聚合函数作为窗口函数 设聚合函数为op语法结构&#xff1a; op(字段名A) over(partition by 字段名B order by 字段名C rows between D1 and D2) 其中&#xff1a; partition by&#xff1a;按照某一字段将数据进行分组 order by&#xff1a;按照某一字段将数据进行排序&…...

0140 数据链路层2

目录 3.数据链路层 3.6局域网 3.7广域网 3.8数据链路层设备 部分习题 3.数据链路层 3.6局域网 3.7广域网 3.8数据链路层设备 部分习题 1.如果使用5类UTP来设计一个覆盖范围为200m的10BASE-T以太网&#xff0c;需要采用的设备是&#xff08;&#xff09; A.放大器 …...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...