【剑指offer|图解|数组】寻找文件副本 + 螺旋遍历二维数组

在这里插入图片描述
🌈个人主页:聆风吟
🔥系列专栏:数据结构、剑指offer每日一练
🔖少年有梦不应止于心动,更要付诸行动。


文章目录

  • 一. ⛳️寻找文件副本(题目难度:简单)
    • 1.1 题目
    • 1.2 示例
    • 1.3 限制
    • 1.4 解题思路一
      • c++代码
    • 1.5 解题思路二
      • c++代码
  • 二. ⛳️螺旋遍历二维数组(题目难度:简单)
    • 1.1 题目
    • 1.2 示例
    • 1.3 限制
    • 1.4 解题思路
      • c++代码
  • 📝结语

一. ⛳️寻找文件副本(题目难度:简单)

⌈ 在线OJ链接,可以转至此处自行练习 ⌋

1.1 题目

设备中存有 n 个文件,文件 id 记于数组 documents。若文件 id 相同,则定义为该文件存在副本。请返回任一存在副本的文件 id

1.2 示例

输入: documents = [2, 5, 3, 0, 5, 0]
输出: 0 或 5

1.3 限制

  • 0 ≤ documents[i] ≤ n-1
  • 2 <= n <= 100000

1.4 解题思路一

排序+遍历
对数组首先进行排序,然后遍历数组,如果documents[i] = documents[i+1],则返回doucuments[i]即可。
在这里插入图片描述

c++代码

class Solution {
public:
    int findRepeatDocument(vector<int>& documents) {
        
        //对数组进行排序 
        sort(documents.begin(),documents.end());

        //遍历查找,判断documents[i]是否等于documents[i+1]
        for(int i=0;i<documents.size()-1;i++)
        {
            if(documents[i]==documents[i+1]) return documents[i];
        }
        //如果不存在,返回-1
        return -1;

    }
};

1.5 解题思路二

哈希表
利用数据结构特点,容易想到使用哈希表记录数组的各个数字,当查找到重复数字则直接返回。

  1. 初始化: 新建 HashSet ,记为 map ;
  2. 遍历数组 documents 中的每个数字 doc:
    1. 如果doc在hmap中,说名重复,直接返回doc;
    2. 如果不在,将doc添加至hmap中;
  3. 如果不存在,返回-1。

在这里插入图片描述

c++代码

class Solution {
public:
    int findRepeatDocument(vector<int>& documents) {
        //新建 HashSet ,记为 map 
        unordered_map<int, bool> map;

        //遍历数组 documents 中的每个数字 doc
        // 1. 如果doc在hmap中,说名重复,直接返回doc;
	    // 2. 如果不在,将doc添加至hmap中;
        for(int doc : documents) {
            if(map[doc]) return doc;
            map[doc] = true;
        }

        //如果不存在,返回-1
        return -1;
    }
};


二. ⛳️螺旋遍历二维数组(题目难度:简单)

⌈ 在线OJ链接,可以转至此处自行练习 ⌋

1.1 题目

给定一个二维数组 array,请返回「螺旋遍历」该数组的结果。

螺旋遍历: 从左上角开始,按照 向右向下向左向上 的顺序 依次 提取元素,然后再进入内部一层重复相同的步骤,直到提取完所有元素。

1.2 示例

输入: array = [ [1, 2, 3], [8, 9, 4], [7, 6, 5] ]
输出: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

1.3 限制

  • 0 <= array.length <= 100
  • 0 <= array[i].length <= 100

1.4 解题思路

根据题目示例 array = [ [1, 2, 3], [8, 9, 4], [7, 6, 5] ],对应的输出为 [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ],可以发现,顺时针打印矩阵的顺序是 “从左向右从上向下从右向左从下向上” 循环。
在这里插入图片描述

解题过程:

  1. 判断 arr 是否为空值,如果为空直接返回 [ ] 即可;
  2. 初始化左边界,右边界,上边界,下边界分别为 lrtb,并创建容器 res 用于存储要打印的结果;
  3. 循环打印: “从左向右、从上向下、从右向左、从下向上” 四个方向循环打印;
    1. 将按顺序添加到 res
    2. 打印一行或一列,让边界收缩 1,代表已经打印
    3. 判断边界是否相遇,如果相遇则打印完毕,跳出循环。
  4. 返回 res

在这里插入图片描述

c++代码

class Solution {
public:
    vector<int> spiralArray(vector<vector<int>>& array) {
        if (array.empty()) return {};
        vector<int> res;
        int l = 0, r = array[0].size() - 1; 
        int t = 0, b = array.size() - 1;
        while(true)
        {
            //从左向右
            for(int i = l; i <= r; i++) res.push_back(array[t][i]);
            if(++t > b) break;
            //从上向下
            for(int i = t; i <= b; i++) res.push_back(array[i][r]);
            if(--r < l) break;
            //从右向左
            for(int i = r; i >= l; i--) res.push_back(array[b][i]);
            if(--b < t) break;
            //从下向上
            for(int i = b; i >= t; i--) res.push_back(array[i][l]);
            if(++l > r) break;
        }

        return res;
    }
};


📝结语

     今天的干货分享到这里就结束啦!如果觉得文章还可以的话,希望能给个三连支持一下,聆风吟的主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是作者前进的最大动力!
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【链表OJ—分割链表】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 1、分割链表题目&#xff1a; 方法讲解&#xff1a; 图文解析&#xff1a; 代码实现&#xff1a; 总结 前言 世上有两种耀眼的光芒&#xff0c;一种是正在升起的太…

坚鹏:中国工商银行浙江大学金融业务转型与场景营销策略培训

中国工商银行打造D-ICBC数字化转型战略&#xff0c;围绕“数字生态、数字资产、数字技术、数字基建、数字基因”五维布局&#xff0c;深入推进数字化转型&#xff0c;加快形成体系化、生态化实施路径&#xff0c;促进科技与业务加速融合&#xff0c;以“数字工行”建设推动“GB…

【父子进程/AES/XTEA/SMC】赛后复盘

官方wp: 进程重影技术&#xff1a; 进程重映像利用了Windows内核中的缓存同步问题&#xff0c;它会导致可执行文件的路径与从该可执行文件创建的映像节区所报告的路径不匹配。通过在一个诱饵路径上加载DLL&#xff0c;然 后卸载它&#xff0c;然后从一个新路径加载它&#x…

SQL语言重温

数据库语言重温 笔记背景SQL教程一些最重要的 SQL 命令SQL WHERE 子句SQL AND & OR 运算符SQL ORDER BY 关键字 笔记背景 由于工作需要&#xff0c;现重温简单SQL语言&#xff0c;笔记记录如下。 SQL教程 SQL&#xff08;Structured Query Language:结构化查询语言&…

网络安全渗透测试

针对网络的渗透测试项目一般包括&#xff1a;信息收集、端口扫描、指纹识别、漏洞扫描、绘制网络拓扑、识别代理、记录结果等。下面就一一介绍。 信息收集 DNS dns信息包含(A, MX, NS, SRV, PTR, SOA, CNAME) 记录&#xff0c;了解不同记录的含义至关重要。 A 记录列出特定…

【Java】构建表达式二叉树和表达式二叉树求值

问题背景 1. 实现一个简单的计算器。通过键盘输入一个包含圆括号、加减乘除等符号组成的算术表达式字符串&#xff0c;输出该算术表达式的值。要求&#xff1a; &#xff08;1&#xff09;系统至少能实现加、减、乘、除等运算&#xff1b; &#xff08;2&#xff09;利用二叉…

C++ 运算符重载与操作符重载

目录 运算符重载 运算符重载的特性 其他运算符重载的实现 默认成员函数——赋值运算符重载 默认成员函数——取地址操作符重载 const成员 附录 运算符重载 C为了增强代码的可读性引入了运算符重载&#xff0c;运算符重载是具有特殊函数名的函数&#xff0c;也具有其返回…

搞懂内存函数

引言 本文介绍memcpy的使用和模拟实现、memmove的使用和模拟实现、memcmp使用、memset使用 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;一起学习C语言&#x1f388; 目录 引言 memcpy memcpy的使用 memcpy的…

智能统计账户支出,掌控财务状况,轻松修改明细。

在这个快节奏的时代&#xff0c;我们的生活每天都在发生着变化。无论是工资收入、购物消费&#xff0c;还是房租支出、投资理财&#xff0c;我们的财务状况也因此变得日益复杂。那么&#xff0c;有没有一种方法可以让我们轻松掌握自己的财务状况&#xff0c;实现智慧理财呢&…

面向AOP(2)spring

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 本…

VUE语法--toRefs与toRef用法

1、功能概述 ref和reactive能够定义响应式的数据&#xff0c;当我们通过reactive定义了一个对象或者数组数据的时候&#xff0c;如果我们只希望这个对象或者数组中指定的数据响应&#xff0c;其他的不响应。这个时候我们就可以使用toRefs和toRef实现局部数据的响应。 toRefs是…

c语言选择排序总结(详解)

选择排序cpp文件项目结构截图 项目cpp文件截图 项目具体代码截图 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <math.h> #include <iostream> #include <string.h> #include <time.h> #include &…

构建外卖系统:使用Django框架

在当今数字化的时代&#xff0c;外卖系统的搭建不再是什么复杂的任务。通过使用Django框架&#xff0c;我们可以迅速建立一个强大、灵活且易于扩展的外卖系统。本文将演示如何使用Django构建一个简单的外卖系统&#xff0c;并包含一些基本的技术代码。 步骤一&#xff1a;安装…

unity 2d 入门 飞翔小鸟 Cinemachine 记录分数(十二)

1、创建文本 右键->create->ui->leagcy->text 2、设置字体 3、设置默认值和数字 4、当切换分辨率&#xff0c;分数不见问题 拖拽这里调整 调整到如下图 5、编写得分脚本 using System.Collections; using System.Collections.Generic; using UnityEngine; …

机器人学习目标

学习目标&#xff1a; 若干年后&#xff0c;我们都将化为尘土&#xff0c;无人铭记我们的存在。那么&#xff0c;何不趁现在&#xff0c;尽己所能&#xff0c;在这个世界上留下一些痕迹&#xff0c;让未来的时光里&#xff0c;仍有人能感知到我们的存在。 机器人协会每届每个阶…

文件格式对齐、自定义快捷键、idea

文件格式对齐 Shift Alt F 自动格式化代码的快捷键&#xff08;如何配置自动格式化&#xff09; 日常编码必备idea快捷键 [VS Code] 入门-自定键盘快捷键 文件格式对齐 文件格式对齐通常是通过编辑器或IDE提供的快捷键或命令完成的。以下是一些常见编辑器和IDE中进行文件…

线边仓到底谁来管比较好

最近这段时间在客户现场出差&#xff0c;和客户聊到系统的边界时&#xff0c;客户IT希望将线边仓也纳入WMS进行管理。 给出的理由是WMS是管理实物的&#xff0c;线边仓也有实物存放&#xff0c;理所当然应该让WMS进行管理。 那线边仓能在WMS管理吗&#x…

12 RT1052的GPIO输入

文章目录 12.1 GPIO输入硬件12.1.1 GPIO初始化 12.1 GPIO输入硬件 RST 复位按键 连接至 RT1052 的 POR_B 引脚&#xff0c;当该引脚为低电平时会引起 RT1052芯片的复位 WAUP 按键 该按键在没有被按下的时候&#xff0c;引脚状态为高电平&#xff0c;当按键按下时&#xff0…

msvcr90.dll丢失的解决方法分享,5个快速修复dll文件丢失教程

在今天的电脑使用过程中&#xff0c;我们可能会遇到各种各样的问题。其中之一就是msvcr90.dll丢失的问题。那么&#xff0c;msvcr90.dll是什么&#xff1f;msvcr90.dll丢失对电脑有什么影响&#xff1f;又该如何解决这个问题呢&#xff1f;接下来&#xff0c;我将为大家详细介绍…

Button背景颜色改不了,一直是默认的紫色

使用android.widget.Button <android.widget.Buttonandroid:layout_width"wrap_content"android:layout_height"wrap_content"android:onClick"doClick"android:text"这是一个按钮"android:textColor"color/black"androi…