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

news2024/11/23 8:23:25

在这里插入图片描述
🌈个人主页:聆风吟
🔥系列专栏:数据结构、剑指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;
    }
};


📝结语

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

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

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

相关文章

2023年第一次系统架构师备考经历

12月7日成绩已经出来&#xff0c;果然最担心的案例分析没有过&#xff0c;才考了40分&#xff0c;还差5分&#xff0c;我就可以一次拿下证书&#xff0c;好可惜啊&#xff0c;今年的题出的有点偏&#xff0c;大数据居然成为必答题&#xff0c;平常是搞Java&#xff0c;大数据方…

做抖店代发,新手如何定类目?五大类目优缺点分析!

我是电商珠珠 类目是店铺的方向&#xff0c;只有将店铺的定位确定好&#xff0c;才能超越大部分的同行。 我经常跟我的学生讲&#xff0c;选择类目的时候不能瞎选&#xff0c;要学会去分析市场&#xff0c;由于大部分的学员前期都是新手小白&#xff0c;所以我们这边会负责给…

[Linux] 用LNMP网站框架搭建论坛

一、nginx在其中工作原理 原理&#xff1a; php-fpm.conf是控制php-fpm守护进程 它是php.ini是一个php解析器 工作过程&#xff1a; 1.当客户端通过域名请求访问时&#xff0c;Nginx会找到对应的虚拟主机 2. Nginx将确定请求。 对于静态请求&#xff0c;Nginx会自行处理…

听GPT 讲Rust源代码--src/tools(9)

File: rust/src/tools/rust-analyzer/crates/ide-assists/src/handlers/apply_demorgan.rs 在Rust源代码中&#xff0c;apply_demorgan.rs文件位于rust-analyzer工具的ide-assists库中&#xff0c;其作用是实现一个辅助函数&#xff0c;用于在代码中应用De Morgan定律的变换。 …

第二十一章网络通信总结

网络程序设计基础 局域网与互联网 为了实现两台计算机的通信&#xff0c;必须用一个网络线路连接两台计算机。如下图所示 网络协议 1.IP协议 IP是Internet Protocol的简称&#xff0c;是一种网络协议。Internet 网络采用的协议是TCP/IP协议&#xff0c;其全称是Transmissi…

SPRD Android 13 下拉状态栏菜单添加静音快捷键简单记录

SPRD Android 13 下拉状态栏菜单添加静音快捷键简单记录 需要修改文件具体修改补丁吐槽需要修改文件 frameworks/base/packages/SystemUI/res/values/config.xml frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java frameworks/base…

Java入门 EditPlus的安装与配置讲解

写Java程序不建议使用EditPlus&#xff0c;首选idea社区版&#xff0c;其次是vscode&#xff0c; 然后是eclipse 。editplus说实话排不上号。 但既然小伙伴想了解一下怎么配置&#xff0c;这里就简单说一下。 下载 首先是jdk&#xff0c;jdk是Java开发和运行的基础&#xff…

【MySQL】:库的操作

库的操作 一.创建和删除数据库二.认识编码三.库的查改1.查找2.修改 四.库的备份和恢复1.备份2.还原 一.创建和删除数据库 说明&#xff1a; 1.大写的表示关键字 2.[] 是可选项 3.CHARACTER SET: 指定数据库采用的字符集 4.COLLATE: 指定数据库字符集的校验规则首先进入MySQL 创…

Verilog基础:时序调度中的竞争(三)(#0的使用)

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 作为一个硬件描述语言&#xff0c;Verilog HDL常常需要使用语句描述并行执行的电路&#xff0c;但其实在仿真器的底层&#xff0c;这些并行执行的语句是有先后顺…

IDEA构建springBoot新项目时JDK只有17和21,无法选择JDK8解决方案

今天创建springboot新项目时&#xff0c;发现IDEA里JDK选项只有17和21&#xff0c;无法选择本机的JDK8&#xff0c;网上查资料后发现是springboot2.7于11.24号后停止维护&#xff0c;基于2.7和java8的spring Initializ官方不再维护&#xff0c;解决方案是在server URL栏&#x…

【WebRTC】【Unity】Unity Web RTC1-Unity中简单实现远程画面

【项目资源下载】 本篇配套直接打开可用的项目包地址,欢迎下载: https://download.csdn.net/download/weixin_41697242/88612084 【背景】 想要在Unity中实现实时远程桌面,找到了Render Streaming这个手段,本篇介绍相应的使用方法和实例。 【要求】 平台:基本常用平台…

【数据结构和算法】--- 栈

目录 栈的概念及结构栈的实现初始化栈入栈出栈其他一些栈函数 小结栈相关的题目 栈的概念及结构 栈是一种特殊的线性表。相比于链表和顺序表&#xff0c;栈只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的…

机器人学习目标

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

【开源】基于Vue.js的公司货物订单管理系统

文末获取源码&#xff0c;项目编号&#xff1a; S 082 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S082。} 文末获取源码&#xff0c;项目编号&#xff1a;S082。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 客户管理模块2.2 商品维护模块2.3 供…

Ultimate VFX

Ultimate VFX 构建套件:

C++实现2024新年日历

日历计算 平年润年计算 首先大概日历最麻烦的就是2月份的计算了&#xff0c;因为会需要考虑到平年还是闰年。每年的2月份天数的计算方法&#xff0c;如果年份能被4整除但不能被100整除&#xff0c;或者能被400整除&#xff0c;那么这一年的2月份只有29天&#xff08;闰年&…

idea import 不让打包时自动带*

场景 因为多人开发&#xff0c;合代码时经常发现因自动import带*了&#xff0c;导致各种问题。 解决

docker学习(八、mysql8.2主从复制遇到的问题)

在我配置主从复制的时候&#xff0c;遇到了一直connecting的问题。 起初可能是我ip配置的不对&#xff0c;slave_io_running一直connecting。&#xff08;我的环境&#xff1a;windows中安装了wsl&#xff0c;是ubuntu环境的&#xff0c;在wsl中装了miniconda&#xff0c;mini…

为什么要使用AI伪原创工具?盘点最新的几款AI伪原创工具

在数字时代&#xff0c;内容创作已成为广大从业者不可或缺的任务。为了满足不断增长的需求&#xff0c;许多人正在寻找可以帮助他们更高效地生成原创内容的解决方案。本文将专心分享一些优质的AI伪原创工具。 为什么要使用AI伪原创工具 随着内容创作的不断发展&#xff0c;越来…

爬虫学习日记第九篇(爬取seebug)

目标&#xff1a;https://www.seebug.org/vuldb/vulnerabilities 需求&#xff1a;爬取cve_id及影响组件 单线程 cookie是有时效的(过一段时间就不行了&#xff0c;大概半小时左右)&#xff0c;但是并不需要登录(直接抓包拿到的请求头) import base64 import json import ur…