蓝桥:前端开发笔面必刷题——Day1 数组(一)

news2024/11/25 4:43:37

文章目录

  • 📋前言
  • 🎯数组中重复的数字
    • 📚题目内容
    • ✅解答
  • 🎯两数之和
    • 📚题目内容
    • ✅解答
  • 🎯替换空格
    • 📚题目内容
    • ✅解答
  • 🎯二维数组中的查找
    • 📚题目内容
    • ✅解答
  • 📝最后


在这里插入图片描述

📋前言

这个系列的文章收纳的内容是来自于蓝桥云课的前端岗位笔面必刷题的内容,简介是:30天133题,本题单题目全部来自于近2年BAT等大厂前端笔面真题!因为部分题目是需要会员,所以该系列的文章内容并非完全全面。文章中题目涉及的内容包括原题、答案和解析等等。
在这里插入图片描述


🎯数组中重复的数字

📚题目内容

找出数组中重复的数字。

在一个长度为 n 的数组 nums 里的所有数字都在 0 ~ n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

输入:[2, 3, 1, 0, 2, 5, 3]
输出:23

题目给的测试用例里有以下限制:

  • 2 <= n <= 14

✅解答

初始提供代码

function findRepeatNumber(nums) {
  // 补充代码
}

答案

function findRepeatNumber(nums) {
    let hash = new Set()
    for(let i=0;i<nums.length;i++){
        if(hash.has(nums[i])){
            return nums[i]
        }
        hash.add(nums[i])
    }
}

函数 findRepeatNumber 接收一个数组 nums,并返回一个重复的数字。在循环中,我们使用 Sethas 方法来判断当前数字是否已经出现过,如果是,则直接返回该数字;否则,将该数字添加到 Set 中。

该算法的时间复杂度为 O(n),空间复杂度为 O(n)。


🎯两数之和

📚题目内容

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

输入: nums = [2,7,11,15], target = 9
输出: [0,1]
解释: 因为 nums[0] + nums[1] == 9 ,返回 [0, 1]
输入: nums = [3,2,4], target = 6
输出: [1,2]
输入: nums = [3,3], target = 6
输出: [0,1]

题目给的测试用例里有以下限制:

  • 2 <= nums.length <= 4
  • 2 <= nums[i] <= 11
  • 6 <= target <= 10
  • 只会存在一个有效答案。

✅解答

初始提供代码

function twoSum(nums, target) {
  // 补充代码
}

答案

function twoSum(nums, target) {
  for(let i=0;i<nums.length;i++){
    for(let j=i+1;j<nums.length;j++){
        if(nums[i]+nums[j]===target){
            return [i,j]
        }
    }
  }
}

采用双 for 循环,暴力枚举的思想来实现。首先使用两个嵌套的循环来遍历整个 nums 数组,对于每对不同的下标 i 和 j(i < j),计算它们所对应的数之和,并判断是否等于目标值 target。如果相等,则直接返回这两个下标。

该函数的时间复杂度为 O(n^2),因为需要进行两层循环嵌套,最多需要遍历 n(n-1)/2 个数对。空间复杂度为 O(1),因为只需要使用常数个变量来存储结果。

另一种解法

function twoSum(nums, target) {
    const hashmap = new Map();
    for (let i = 0; i < nums.length; i++) {
        const num2 = target - nums[i];
        if (hashmap.has(num2)) {
            return [hashmap.get(num2), i];
        }
        hashmap.set(nums[i], i);
    }
}

该函数的实现中,首先创建了一个新的 Map 对象 hashmap,然后遍历整个 nums 数组。对于每个数字 nums[i],计算出与目标值之差 num2 = target - nums[i],然后在 hashmap 中查找是否存在满足条件的 num2,如果存在,则直接返回对应的下标;如果不存在,则将当前数字作为新的键,将下标作为对应的值,存储到 hashmap 中,以备下次查找时使用。

该算法的时间复杂度为 O(n),空间复杂度为 O(n)。


🎯替换空格

📚题目内容

请实现一个函数,把字符串 s 中的每个空格替换成 “%20”。

题目给的测试用例里有以下限制:

  • 0 <= s.length <= 14

✅解答

初始提供代码

function replaceSpace(s) {
  // 补充代码。
}

答案

function replaceSpace(s) {
  let result = "";
  for (let i = 0; i < s.length; i++) {
    if (s[i] === " ") {
      result += "%20"
    } else {
      result += s[i]
    }
  }
  return result
}

首先创建一个新的空字符串 result,然后遍历原始字符串 s 中的每个字符。对于每个字符,如果它是一个空格,则将 "%20" 添加到 result 中,否则直接将它添加到 result 中。

该函数的时间复杂度为 O(n),其中 n 是原始字符串 s 的长度,因为需要遍历一遍输入的字符串。而空间复杂度也为 O(n),因为最坏情况下,需要将每个空格都替换为 "%20"

另一种解法

function replaceSpace (s) {
  return s.replace(/\s/g,'%20')
}

使用 String 类型的 replace 方法和正则表达式对字符串 s 进行替换空格的处理,在这个实现中,我们通过正则表达式 /\s/g 匹配所有空格字符,并使用 "%20" 作为新的内容来替换它们。最终返回替换后的字符串即可。

该函数的时间复杂度同样为 O(n),其中 n 是原始字符串 s 的长度,因为需要遍历一遍输入的字符串并进行替换操作。而空间复杂度也为 O(n),因为在正则表达式匹配后会得到一个新的字符串对象,并且该字符串对象的长度可能比原始字符串更长,因此需要额外的空间来存储。


🎯二维数组中的查找

📚题目内容

在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:

现有矩阵 matrix 如下:

[
  [1, 4, 7, 11, 15],
  [2, 5, 8, 12, 19],
  [3, 6, 9, 16, 22],
  [10, 13, 14, 17, 24],
  [18, 21, 23, 26, 30],
];

给定 target = 5,返回 true。 给定 target = 20,返回 false。

题目给的测试用例里有以下限制:

  • 0 <= n <= 5
  • 0 <= m <= 5。

✅解答

初始提供代码

function findNumberIn2DArray(matrix, target) {
  // 补充代码。
}

答案

function findNumberIn2DArray(matrix, target) {
  if (!matrix || matrix.length === 0 || matrix[0].length === 0) {
    return false;
  }
  const m = matrix.length; // 行数
  const n = matrix[0].length; // 列数
  let row = 0; // 行指针,从第一行开始
  let col = n - 1; // 列指针,从最后一列开始
  while (row < m && col >= 0) {
    if (matrix[row][col] === target) { // 找到了目标值
      return true;
    } else if (matrix[row][col] > target) { // 当前值比目标值大,向左移动列指针
      col--;
    } else { // 当前值比目标值小,向下移动行指针
      row++;
    }
  }
  return false; // 遍历完整个数组都没有找到目标值
}

该函数的实现中,首先通过检查输入矩阵是否为空来判断是否需要提前返回 false。然后,定义了两个指针 rowcol ,分别用于表示当前搜索的行和列。由于矩阵中的每一行都已经按照升序排列,而每一列也已经按照升序排列,因此可以采用类似于二分查找的方法进行搜索。

具体来说,在每次迭代中,我们比较当前指针所在位置的元素与目标值的大小关系。我们可以从矩阵的右上角开始搜索,如果当前值等于 target,则直接返回 true 。如果当前值大于 target,则说明 target 可能出现在当前元素的左侧,因此需要将列指针向左移动一位 。反之,如果当前值小于 target ,则说明目标值可能出现在当前元素的下方,因此需要将行指针向下移动一位 。不断重复以上步骤,直到找到目标值或者搜索完整个数组。
在这里插入图片描述
该函数的时间复杂度为 O(m+n),其中 m 和 n 分别表示矩阵的行数和列数。因为每次迭代可以将搜索范围缩小一行或者一列,最多需要进行 m+n 次迭代才能找到目标值(当目标值位于矩阵的右上角时)。而空间复杂度为 O(1),因为只使用了常数级别的额外空间来存储指针和一些临时变量。


📝最后

感谢阅读到这,文章内容中题目的答案都是通过检测的了,如果有疑问和争议的内容,可以评论区留言和私信我,收到消息第一时间解答和回复。
在这里插入图片描述

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

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

相关文章

C语言-程序环境与预处理

程序环境与预处理 程序环境翻译环境&#xff08;编译链接&#xff09;预编译编译汇编链接 执行环境 预处理预定义符#define定义的标识符 宏#define定义宏#define替换规则宏的命名约定带副作用的宏参数宏和函数的比较 其它#和##的使用字符串常量化运算符#标记粘贴运算符## 命令行…

fastled教程

文章目录 EVERY_N_MILLISECONDS(10)EVERY_N_SECONDS(5)fill_solid(leds, NUM_LEDS, CRGB::Red);fill_gradient_RGBfill_rainbow(leds, NUM_LEDS, i, 255 / NUM_LEDS);效果1fadeToBlackBy(leds, NUM_LEDS, 1); 效果2FastLED.setBrightness(2*i);// 效果3leds[i] CHSV(hue (i *…

scanf和scanf_s的区别、解决VS返回值被忽略的报错问题

一、scanf和scanf_s是什么&#xff1f; scanf()不会检查输入边界&#xff0c;可能造成数据溢出。 scanf_s()会进行边界检查。 二、分别分析 1.scanf scanf表示从键盘输入指定格式的数据。如&#xff1a;scanf("%d",x);指从键盘给x输入一个int型&#xff08;整型&…

【计网】【TCP】浅析TCP三次握手

前言 之前学习计网时不认真&#xff0c;TCP三次握手稀里糊涂就过去了&#xff0c;最近在重新查漏补缺计网这方面的知识&#xff0c;饭要一口一口吃&#xff0c;我就没有把其中涉及到的大量知识点写在此博客中&#xff0c;此文仅管中窥豹&#xff0c;之后再详细写吧。 笔记中有…

初步认识性能测试和完成一次完整的性能测试

上一篇博文主要通过两个例子让测试新手了解一下测试思想&#xff0c;和在做测试之前应该了解人几点&#xff0c;那么我们在如何完成一次完整的性能测试呢&#xff1f; 测试报告是一次完整性能测试的体现&#xff0c;所以&#xff0c;这里我给出一个完整的性能测试报告&#xff…

搞懂@DateTimeFormat 注解 和 对应的时间类型

通常而言&#xff0c;前端时间控件&#xff0c;一般情况下直接会传一个yyyy-MM-dd的日期字符串到后台。如果我们直接用java.util.Date类型来接收&#xff0c;是无法获取的。这是因为Date类型默认的格式为&#xff1a;Tue May 16 00:00:00 CST 2023这种。 举例 ApiOperation(val…

Games104现代游戏引擎学习笔记08

渲染那部分看的云里雾里的&#xff0c;等学完其他图形学的内容再回头开吧 游戏动画的三个挑战&#xff1a; 1.根据交互实时的反应各种变化 2.一帧时间里的庞大计算 3.更真实自然的表现 2D动画 sprite animation 把每一帧精灵循环绘制出来 2D技术实现3D效果 在各个视角采了一…

shell脚本——流编辑器“三剑客”之awk命令

shell脚本——流编辑器“三剑客”之awk命令 一、awk1、工作原理2、命令格式3、awk常见的内建变量&#xff08;可直接用&#xff09;4、按行输出文本5、按字段输出文本’:’6、通过管道、双引号调用shell命令 一、awk 1、工作原理 逐行读取文本&#xff0c;默认以空格或TAB键为…

射频放大器的原理和作用(射频放大器和功率放大器的区别)

射频放大器是一种电子电路&#xff0c;用于将输入信号增强到足够高的电平以驱动射频输出负载。其原理和作用如下&#xff1a; 射频放大器的工作原理是利用晶体管的三极管效应&#xff0c;将输入信号放大到足够的电平以驱动输出负载。在射频放大器中&#xff0c;输入信号经过输入…

深入理解 python 虚拟机:破解核心魔法——反序列化 pyc 文件

深入理解 python 虚拟机&#xff1a;破解核心魔法——反序列化 pyc 文件 在前面的文章当中我们详细的对于 pyc 文件的结构进行了分析&#xff0c;pyc 文件主要有下面的四个部分组成&#xff1a;魔术、 Bite Filed 、修改日期和 Code Object 组成。在前面的文章当中我们已经对前…

Android NDK: 使用Python生成下载地址

文章目录 1. 目的2. NDK下载链接3. 生成链接的 Python 脚本4. Bonus: 生成表格的 Python 脚本 1. 目的 Android NDK 的 github wiki 中给出了部分历史版本 NDK 的下载地址&#xff0c;有些版本的下载地址并没有在网页中给出。实际上这些下载地址很有规律。本文给出具体的链接&…

无人水面艇声呐装备现状与发展趋势(水声功率放大器)

无人水面艇声呐装备是目前海洋探测和水下情报收集的重要工具&#xff0c;其发展趋势受到了国防、军事、海洋资源勘探等领域的广泛关注。本文将介绍当前无人水面艇声呐装备的现状以及未来的发展趋势。 一、现状 无人水面艇声呐装备主要应用于水下物体的探测和测量&#xff0c;其…

NDK OpenGL仿抖音极快极慢录制特效视频

NDK​系列之OpenGL仿抖音极快极慢录制特效视频&#xff0c;本节主要是在上一节OpenGL代码架构上增加极快极慢等特效的视频录制功能。 实现效果&#xff1a; 实现逻辑&#xff1a; 在上一节的特效效果的基础上&#xff0c;使用MediaCodec和自定义EGL&#xff0c;将效果视频录制…

CountDownLatch与Binder连接池

CountDownLatch与Binder连接池 CountDownLatch 如果现在有一个题,有5个数,这时候我想让这5个数同时都乘2,然后算出结果后再算它们的平均数 这时候就可以用CountDownLatch import java.util.concurrent.CountDownLatch; public class Example {public static void main(Stri…

总结853

学习目标&#xff1a; 月目标&#xff1a;5月&#xff08;张宇强化前10讲&#xff0c;背诵15篇短文&#xff0c;熟词僻义300词基础词&#xff09; 周目标&#xff1a;张宇强化前3讲并完成相应的习题并记录&#xff0c;英语背3篇文章并回诵 每日必复习&#xff08;5分钟&#…

leetcode(力扣)刷题笔记(c++)【下】

文章预览&#xff1a; 单调栈739. 每日温度496.下一个更大元素 I503. 下一个更大元素 II42. 接雨水84.柱状图中最大的矩形 额外题目1365.有多少小于当前数字的数字941. 有效的山脉数组1207. 独一无二的出现次数189. 轮转数组724. 寻找数组的中心下标922. 按奇偶排序数组 II 后续…

软考高级架构师笔记-3数据库

目录 1. 前言 & 更新2. 数据库基本概念3. E-R图与二维表4. 约束、范式5. 数据库新技术1. 前言 & 更新 前文回顾: 软考高级架构师笔记-1计算机硬件软考高级架构师笔记-2计算机软件(操作系统)本章考情: 数据库章节都会考3-5分左右,第二版教材上对应2.3.3和6,主要考…

软考A计划-真题-分类精讲汇总-第十四章(数据流图)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

Python每日一练(20230517) 最大连续1的个数 I\II\III

目录 1. 最大连续1的个数 I Max Consecutive Ones &#x1f31f; 2. 最大连续1的个数 II Max Consecutive Ones &#x1f31f;&#x1f31f; 3. 最大连续1的个数 III Max Consecutive Ones &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; G…

RabbitMQ养成记 (5. MQ的topics模式)

主题模式 Topic类型的Exchange与Direct相比&#xff0c;都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key 的时候使用通配符&#xff01; Routingkey 一般都是有一个或多个单词组成&#xff0c;多个单词之间以”.”分割&a…