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

2023-11-09

目录

前言

题目

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;
}

总结

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 利用STM32CubeMX软件生成USB_HOST读写U盘

    一 测试平台 MCU STM32F429IGT6 工具 STM32CubeMX软件 编译软件 MDK 二 配置步骤 1 打开STM32CubeMX软件 创建新的工程文件 点击ACCESS TO MCU SELECTOR选项 2 选择芯片型号
  • 1-4、Lua基本语法

    1 4 Lua基本语法 文章目录 1 4 Lua基本语法 1 赋值语句 2 局部变量与代码块 3 控制结构语句 if语句 while语句 for语句有两大类 Lua像C和PASCAL几乎支持所有的传统语句 赋值语句 控制结构语句 函数调用等
  • MFC之图标(标题)的动态使用15

    1 图标 标题 的动态使用 我们将实现左上角动态图标的显示 首先按照向导创建新的项目 由于我们的图标是属于框架 所以在框架类处理 1 首先在框架类定义图标数组用于存储图片 我这里有四张所以大小为4 private HICON m icon
  • 程序员35岁以后就没有出路了吗?听听京东10年测开的分析

    国内的互联网行业发展较快 所以造成了技术研发类员工工作强度比较大 同时技术的快速更新又需要员工不断的学习新的技术 因此淘汰率也比较高 超过35岁的基层研发类员工 往往因为家庭原因 身体原因 比较难以跟得上工作节奏 所以裁员往往优先考虑这类员
  • MCU接收串口字符型数据转换成数据型数据

    转自 http blog csdn net langaopeng article details 7672252 做MCU开发时 常常碰到串口接收的数据是字符型数据 是ASCII码 而我们需要解析的是数据型的 如 串口接收到的是 236 8
  • 【机器学习实战】1、机器学习主要任务

    文章目录 1 1 何谓机器学习 1 2 机器学习重要性 1 3 机器学习主要任务 1 4 如何选择合适的算法 1 5 开发机器学习应用程序的步骤 1 6 python语言的优势 1 6 1 python语言特色 1 6 2 python语言
  • npm、cnpm、yarn之间的区别

    npm 在使用 npm 安装包的时候 给人的第一感觉就是慢 而且还会在命令行打印出一堆的东西 而且经常会出现 在我的电脑上可以 这个问题 着实是有点难受 但也不得不说 npm 是 node 如此成功的主要原因之一 npm的缺点如下 1 由于
  • 网站html保存,如何保存网页内容(高级篇)

    上一篇介绍了允许 另存为 的网站保存网页的方法 本篇继续介绍禁止 另存为 的网站也实现保存网页的方法 步骤比上一篇麻烦一些 但也不难 以下是具体步骤 提示 对于这类网站 尽管 文件 菜单中的 另存为 是可用的 但当你试图另存为 网页快要保存
  • [网络安全自学篇] 七十八.XSS跨站脚本攻击案例分享及总结(二)

    这是作者网络安全自学教程系列 主要是关于安全工具和实践操作的在线笔记 特分享出来与博友们学习 希望您喜欢 一起进步 前文分享了肖老师 Seak 的分享 介绍恶意代码与APT攻击中的武器 包括A2PT的攻击武器 普通APT组织的自研恶意代码
  • 虚拟机Parallels Desktop

    Mac上安装Windows虚拟机 Parallels Desktop 之前在Mac上安装虚拟机使用的是VMware Fusion 用起来感觉不是很流畅 很不舒服 所以今天试试号称Mac上最好的虚拟机Parallels Desktop 概述
  • 迷你气象站(雨量计,风速,风向)

    天气预报对于计划我们的日常活动很重要 农民需要信息来帮助他们计划农作物的种植和收割 航空公司需要了解当地天气状况才能安排航班 天气预报可以帮助我们做出更明智的日常决策 甚至可以帮助我们摆脱危险 在本教程中 我们将制作一个微型气象站 该气象站
  • python迷宫游戏的课程设计,Python迷宫游戏(基础版)

    画地图 map data 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 2 1 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 1 0 1 0 1 0 1 1 0 1 1 0 0 0
  • 互联网晚报

    教育部回应降低英语教学比重建议 中小学外语课时占比低于语文等学科 教育部网站9月23日公布 对 关于增强文化自信增加中国文化内容教学改革和降低英语教学比重的建议 的答复 答复显示 根据规定 外语课时占比为6 8 明显低于语文 数学 体育 艺
  • opencv3+python3.5成语填字游戏(一)印刷体汉字的分割

    首先这是一个成语填字游戏 大概就是一张成语填字游戏图片 通过opencv图像识别后转为矩阵 再通过解算法 解出答案 在显示到图片上 源代码 https github com mayue801 crossword puzzle idiom 本
  • mac kafka安装

    1 安装 brew install kafka kafka依赖于zookeeer 所以使用homebrew安装kafka 集群时 zookeeper也会被安装 2 zookeeper和kafka启动 重启 关闭 zookeeper后台启动
  • initialize specified but the data directory has files in it. Aborting 错误解决

    最近学习配置mysql 1 先按百度的文章https jingyan baidu com article f3ad7d0ffc061a09c3345bf0 html 做好基础工作 但是在执行 net start mysql 时 失败了 提示
  • 油猴脚本(Tampermonkey)的获取与简单使用

    油猴脚本的使用 什么是油猴脚本 油猴 可以通过安装各类脚本对网站进行定制 当然伟大的脚本面向的是所有上网者 所以借由各位大神的脚本我们能实现更多更强大的功能 例如 直接下载百度网盘文件 全速 重新定制繁杂的微博页面 去掉视频播放广告 甚至播
  • python爬取WHO全球疫情数据

    python讨论qq群 996113038 导语 以武汉为中心的全国保卫战已经基本胜利 而国外的疫情发展开始愈演愈烈 很多小伙伴想要了解全球的疫情数据 所以这次我们来爬取一下世卫组织官网上的疫情pdf 以及几个主要国家从1月22到现在的数据
  • Servlet 详细教程 + 案例

    Servlet 方法介绍 Servlet urlPattern 配置 IDEA 模板创建 Servlet 中文乱码问题 POST 乱码 GET 乱码 路径问题 Response 响应字符数据 Response 响应字节数据 用户登录案例 准
  • 【高频】前端面试算法题,案例+答案,一学就会!

    目录 前言 题目 1 反转字符串 2 判断回文字符串 3 数组去重 4 找出最大值和最小值 5 斐波那契数列 6 查找缺失的数字 7 判断两个字符串是否是字母异位词 8 实现数组扁平化 9 实现字符串压缩 10 判断是否为无序数组中的连续数