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

【每日易题】数组下标的逆天用法——你见过把数组存储的值当作数组下标来解题的吗?

在这里插入图片描述

君兮_的个人主页

勤时当勉励 岁月不待人

C/C++ 游戏开发

Hello,米娜桑们,这里是君兮_,在最近是刷题中,遇到了一种非常新奇的数组下标的用法,今天想来给大家分享一下这种神奇的思路和方法,希望能在你遇到类似问题时能通过这种方法快速解决

数组中消失的它

  • 一.题目介绍
  • 二.数组下标的特别用法
    • 思路分析
    • 具体详解以及代码
  • 总结

一.题目介绍

  • LeetCode此题的oj链接在这里
    找到所有数组中消失的数字
    在这里插入图片描述
  • 如果你看过我上一篇有关“单身狗”的每日易题的话,你可能会觉得这个题不过就是单身狗问题的一个变种,但是这里最大的问题在于,具体到题目中,我们无法确定有几条“单身狗”,也就是不知道具体有几个消失的数字,因此,大多数人可能会产生这样一种思路,并且写出下面这段代码
int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize){*returnSize = 0;
int j = 0;
int count = 0;
int size = 0;
int* returnNum = (int*)malloc(sizeof(int) * (numsSize - 1));
for (int i = 1; i <= numsSize; i++)
{for (j = 0; j < numsSize; j++){size = j;if (nums[j] == i)break;}if (nums[size] != i){returnNum[(*returnSize)++] = i;}}
return returnNum;
}
  • 大致的思路是,从1-n,每次都遍历一遍数组,当遍历完一个自然数后,如果数组中没有对应的数字,就说明数组中没有这个数,把它放进需要返回的数组中
  • 这种思路是非常正常并且正确的,但是,很遗憾,是过不了所有测试用例的
    在这里插入图片描述
  • 原因很简单,时间复杂度为o(n^2),一旦给出上图类似的测试用例时,就会超出运行的时间限制,下面我来介绍一种新的思路

二.数组下标的特别用法

思路分析

  • 题目的要求是要找的消失的数字,也就是数组中不存在的数字,如果不存在这个数字,那我们如果把数组中的数字作为数组的下标,是不是就找不到消失的数字的数组下标呢?
  • 好好想想上面这句话,我们来进一步思考
  • 如果找不到对应消失数字的下标,那么就会出现这样一种情况,当我们把数组中存放的元素作为数组的下标进行统一的操作,由于不存在消失数字的下标,我们就无法对该消失数字做下标的位置进行操作,这样存在的数字和消失的数字就有了区别,我们就可以判断哪些下标位置的元素没进行某种操作返回下标这种方法来找到我们的消失的数字了(就是此时的下标)

具体详解以及代码

通过上面的分析,我们可以得到以下的解题思路:
我们首先重置一遍数组中的值,将数组中每个位置存储的值作为操作的数组的下标,将该下标的值改为负值,循环n次后,此时以数组中存放的值的为下标存储的元素全部被改为负值,只有以数组中不存在的值的下标的元素未被修改仍为正值,遍历一遍数组,如果数组下标存储的元素的值为正,说明下标+1就为消失的数字,把它们依次填入需要返回的数组即可

  • 以数组[ 2,3,3,2,4]为例
    在这里插入图片描述

  • 这里还有几点需要注意的地方

  • 1.我们知道,有消失的数字就一定有重复的数字,因此我们在置负值时,需要先判断一下该下标存储的值是否为负,如果为负,就不需要再改了,同时也是由于这个原因,我们不想看到数组下标出现负数的情况(之前某个位置存储过我们此时的下标,并且我们已经置负了),因此下标中需要加绝对值

  • 2.由于我们的数组下标是从0开始的,因此我们在返回消失的数字时,应该进行+1还原

  • 源码如下:

int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize){for(int i=0;i<numsSize;i++){if(nums[abs(nums[i])-1]>0)//abs置绝对值,-1是因为数组下标从0开始nums[abs(nums[i])-1]*=-1;}//减一是因为数组中必有一个在1到n中存在的数 比如111111111111111111 一定有1int*ret=(int*)malloc(sizeof(int)*(numsSize-1));*returnSize=0;for(int i=0;i<numsSize;i++){if(nums[i]>0)ret[(*returnSize)++]=i+1;//下标从0开始,消失的数字要+1}return ret;
}
}

在这里插入图片描述

  • 我们这种方法,时间复杂度为O(n),不算需要返回的数组,空间复杂度为O(1),无疑是非常高效且省内存的。

总结

  • 今天的内容到这里就结束了,如果一时理解不了我的建议是自己带入一些具体的例子画图分析,这样很容易就大致明白每一步操作在干嘛了,如果你明白了的话,不妨自己试着用这种方法来解一下这道题哦!!

  • 好了,如果你有任何疑问欢迎在评论区或者私信我提出,大家下次再见啦!

新人博主创作不易,如果感觉文章内容对你有所帮助的话不妨三连一下这个新人博主再走呗。你们的支持就是我更新的动力!!!

**(可莉请求你们三连支持一下博主!!!点击下方评论点赞收藏帮帮可莉吧)**

在这里插入图片描述

相关文章:

【每日易题】数组下标的逆天用法——你见过把数组存储的值当作数组下标来解题的吗?

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;在最近是刷题中&#xff0c;遇到了一种非常新奇的数组下标的用法&#xff0c;今天想来给大家分享一下这种神奇的思路和方法&#xff0c;希望能在你遇到类似问题时能通…...

mysql基本操作

常用的数据类型 int 整型用于定义整数类型的数据float 单精度浮点4字节32位 准确表示到小数点后六位 double 双精度浮点8字节64位双精度浮点8字节64位char 固定长度的字符类型用于定义字符类型数据varchar可变长度的字符类型 text文本image图片de…...

vue组件的使用

一、首先要穿件组件构造器对象&#xff0c;或者导入组件 1..在本部分注册组件其中组件为子组件 2.在本部分注册组件 二、而后注册组件 1.在本部分注册组件其中组件为子组件 2.在本部分注册组件 三、 接着&#xff0c;使用组件。 1.在本部分注册组件其中组件为子组件 其中v-i…...

Axure设计之日期选择器(年月选择)

在系统中&#xff0c;日期选择器经常会用到&#xff0c;包括日历日期的选择、日期时间的选择和日期范围的选择&#xff0c;一般是下拉列表的形式进行选择。Axure没有自带的日期选择器&#xff0c;下面教大家如何在Axure中制作真实日期选择&#xff08;年月选择&#xff09;效果…...

CAD泰森多边形框架3D插件

插件介绍 CAD泰森多边形框架3D插件可用于在AutoCAD软件内生成三维Voronoi框架结构实体模型&#xff0c;适用于多孔Voronoi科研论文渲染绘图、Voronoi框架有限元建模、Voronoi空间结构优化等方面的应用。 使用说明 插件可设置生成的几何尺寸、晶格尺寸及边框直径等信息。 插…...

Django的render()函数的三个主要参数详解,特别是第三个字典类型的参数context

当在Django中使用 render() 函数时&#xff0c;它有三个主要参数&#xff1a;request&#xff0c;template_name&#xff0c;和 context。第三个参数&#xff0c;即 context&#xff0c;是一个字典&#xff0c;用于将数据传递给模板以进行渲染。 在下面的代码中&#xff1a; …...

统计不同字段的值域

目录 背景数据库表 需求目标SQL知识点注意点 背景 数据库 PostgreSQL 表 tbl_mr hosxblyfsylfkfs广东医院1301广东医院1404浙江医院0307浙江医院0209………… tbl_emr hosxblyfsylfkfs广东医院9999903广东医院1408浙江医院9507浙江医院0214………… 其中 xb 字段为 num…...

js this 指的是什么

1 对象中方法 函数中的this 指的是包含它的对象, 子对象中的this指的是全局在浏览器中是 window 对象 var obj1 {this1funcA: function() {var obj2 {innerFunc: function() {this2}};obj3{ this3 }}obj4{ this4 } }; 在这个对象中&#xff0c;this 的指向会随着调用上…...

用pytorch实现Resnet

ResNet&#xff08;Residual Network&#xff09;是一种深度卷积神经网络架构&#xff0c;由Kaiming He等人于2015年提出。它在计算机视觉领域引起了革命性的变革&#xff0c;使得训练更深的神经网络成为可能&#xff0c;超越了传统网络架构的限制。 ResNet的主要创新在于…...

C++类成员的访问权限以及类的封装

C通过 public、protected、private 三个关键字来控制成员变量和成员函数的访问权限&#xff0c;它们分别表示公有的、受保护的、私有的&#xff0c;被称为成员访问限定符。所谓访问权限&#xff0c;就是你能不能使用该类中的成员。 Java、C# 程序员注意&#xff0c;C 中的 publ…...

Linux 多线程解决客户端与服务器端通信

一、一个服务器端只能和一个客户端进行通信&#xff08;单线程模式&#xff09; 客户端代码ser.c如下&#xff1a; #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<sys/socket.h> #include<netinet…...

FMX的TListBox单选列表框

TListBox功能比较全&#xff0c;对于选择项&#xff0c;有“两种”模式&#xff0c;一种就是ListItem选中&#xff08;界面上就是焦点和颜色变化&#xff09;&#xff0c;可以无&#xff0c;单选和多选。另一种是通过CheckBox来选择ListItem的选中。默认下&#xff0c;ShowChec…...

prompt工程(持续更新ing...)

诸神缄默不语-个人CSDN博文目录 我准备想办法把这些东西整合到我的ScholarEase项目里。到时候按照分类、按照prompt生成方法列一堆选项&#xff0c;用户自己生成prompt后可以选择在ScholarEase里面聊天&#xff0c;也可以复制到别的地方&#xff08;比如ChatGPT网页版之类的&a…...

win11 docker-desktop安装记录

win11安装Docker踩坑实录 马上开始正式工作了&#xff0c;需要用到docker&#xff0c;以前在win10上安装过&#xff0c;新电脑是win11&#xff0c;心想肯定会遇到坑&#xff0c;就浅浅记录一下 首先看一下安装要求 需要wsl2 那么就先进行 wsl的更新 wsl --update注意这里网络…...

opencv特征提取、梯度计算

...

AI绘画工具MJ新功能有点东西,小白也能轻松一键换装

先看最终做出来的效果 直接来干货吧。Midjourney&#xff0c;下面简称MJ 1.局部重绘功能来袭 就在前两天&#xff0c;MJ悄咪咪上线了这个被众人期待的新功能&#xff1a;局部重绘。 对于那些追求创新和个性化的设计师来说&#xff0c;局部绘制不仅是一个实用的功能&#xff…...

java springboot sql防注入的6种方式

​在Spring Boot中&#xff0c;可以通过使用参数绑定、预处理语句和使用ORM框架等方式来防止SQL注入。以下是几种常见的方式&#xff1a; 1. 参数绑定&#xff1a;通过使用参数绑定&#xff0c;将用户输入的数据作为参数传递给SQL语句&#xff0c;而不是将其直接拼接到SQL语句中…...

深度学习实战49-基于卷积神经网络和注意力机制的汽车品牌与型号分类识别的应用

大家好,我是微学AI,今天给大家介绍一下深度学习实战49-基于卷积神经网络和注意力机制的汽车品牌与型号分类识别的应用,该项目就像是一只智慧而敏锐的眼睛,专注地凝视着汽车世界。这个项目使用PyTorch作为强有力的工具,提供了一个深度学习的舞台,让我们能够设计和训练一个…...

Open3D(C++) 可视化(3)——批量动态可视化点云

目录 一、概述二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 拿到一个新的点云数据集,想要快速查看数据集内点云的形状特征。然而,对于动辄几千个点云的数据集而言,逐个将点云拖入…...

opencv 文档识别+UI界面识别系统

目录 一、实现和完整UI视频效果展示 主界面&#xff1a; 识别结果界面&#xff1a; 查看处理图片过程&#xff1a; 查看历史记录界面&#xff1a; 二、原理介绍&#xff1a; 将图像变换大小->灰度化->高斯滤波->边缘检测 轮廓提取 筛选第三步中的轮廓&#xf…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...