数组题目:645. 错误的集合、 697. 数组的度、 448. 找到所有数组中消失的数字、442. 数组中重复的数据 、41. 缺失的第一个正数

645. 错误的集合

思路:

我们定义一个数组cnt,记录每个数出现的次数。然后我们遍历数组,从1开始,如果cnt[i] == 0 那就说明这个是错误的数,如果 cnt[i] == 2,那就说明是重复的数。

代码:

class Solution {public int[] findErrorNums(int[] nums) {int n = nums.length;int[] cnts = new int[n + 1];for(int i : nums) cnts[i] ++;int[] ans = new int[2];for(int i = 1;i <= n; i++){if(cnts[i] == 0) ans[1] = i;if(cnts[i] == 2) ans[0] = i;}return ans;}
}

 697. 数组的度

思路:

题目说的度,是说元素出现的次数的最大值。但是又说最短连续子数组,那么我们就要知道数组的长度。我们定义一个Map,key 是数组里的数,value是一个数组,value[0]是指出现的次数,value[1]是指出现的第一次坐标,求数组的长度就用最后一次坐标减去第一次出现的坐标。

因为题目说nums.length 从1 开始,所以我们定义int[] Max = {1, 1}。然后遍历数组,如果MAP里没有记录,就存下对应的参数,如果出现过,就把value[0] + 1,然后和max数组对比。

  • 如果说value[0] > max[0],那就把value的信息更新到max
  • 如果说value[0] == max[0],那么就要看数组的长度

代码:

class Solution {public int findShortestSubArray(int[] nums) {// 1、我们需要知道某个数的出现次数// 2、要求最短连续数组,所以我们需要知道数组的长度// 3、需要记录的:次数、长度和数字本身// 4、长度可以由下表计算,保存初始下标// key :数, value[0] :出现的次数, value[1] :第一次下表Map<Integer, Integer[]> map = new HashMap<>();int[] max = {1, 1};for(int i = 0; i < nums.length; i++){if(!map.containsKey(nums[i])){map.put(nums[i],new Integer[] {1, i});}else{Integer[] cur = map.get(nums[i]);//出现次数+1cur[0] += 1;//如果出现的次数比max大,或者次数相同,但是数组长度更小,就更新maxif(cur[0] > max[0] || cur[0] == max[0] && i - cur[1] + 1 < max[1]){max = new int[] {cur[0], i - cur[1] + 1};}}}return max[1];}
}

 448. 找到所有数组中消失的数字

思路:

我们先遍历nums,如果  nums[i] == i + 1,那就说明该位置就是对应的数字。

然后遍历nums,如果nums[nums[i] - 1] == nums[i] ,那就说明他不是消失的数字。

如果我们遍历到有重复的数字,比如上面的3,而且nums[2] == 3,那我们就往后遍历。

遍历之后的结果:

nums:[1,2,3,4,3,2,7,8](注意题目中的2, 3)

然后我们再遍历一次nums,如果nums[i] != i + 1,那就说明他们是消失的数字

代码:

class Solution {public List<Integer> findDisappearedNumbers(int[] nums) {List<Integer> res = new ArrayList<>();int i = 0;while(i < nums.length){if(nums[i] == i + 1){i ++;continue;}int index = nums[i] - 1;if(nums[index] == nums[i]){i++;continue;}int tmp = nums[i];nums[i] = nums[index];nums[index] = tmp;}for(int j = 0; j < nums.length; j++){if(nums[j] != j + 1){res.add(j + 1);}}return res;}
}

442. 数组中重复的数据

思路:

我们遍历nums,遍历的每一个元素都变成|x|,然后把nums[|x| - 1]的数乘上-1。

再遍历一遍原数组,如果当前遍历的元素是负的,就说明他是重复的,那就说明|x|是重复的。

代码:

class Solution {public List<Integer> findDuplicates(int[] nums) {int n = nums.length;List<Integer> ans = new ArrayList<>();for(int i = 0; i < n; i++){int x = Math.abs(nums[i]);if(nums[x - 1] > 0){nums[x - 1] = -nums[x - 1];}else{ans.add(x);}}return ans;}
}

41. 缺失的第一个正数

思路:

方法1:

对于一个长度为 N 的数组,其中没有出现的最小正整数只能在 [1,N+1] 中。如果再[1,N]中没有出现,那就说明是第N+1。

我们遍历数组,如果当前的数小于或者等于0,那就让他变成N+1,定义int x = nums[i],让nums[x - 1]乘上-1。

然后我们遍历数组,如果在[1,N]中有没有正数,那就说明是N+1, 如果有那就是第一个正数的坐标+1。

代码:

class Solution {public int firstMissingPositive(int[] nums) {int n = nums.length;for(int i = 0; i < n; i++){if(nums[i] <= 0) nums[i] = n + 1;}for(int i = 0; i < n; i++){int x = Math.abs(nums[i]);if(x <= n){nums[x - 1] = -Math.abs(nums[x - 1]);}}for(int i = 0; i < n; i++){if(nums[i] > 0){return i + 1;}}return n + 1;}}

方式2:

通过置换,把对应的数字放到对应的坐标,如果当前的数nums[i] != i + 1,那就说明i+1是缺失的第一个。

class Solution {public int firstMissingPositive(int[] nums) {int n = nums.length;for(int i = 0; i < n; i++){while(nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] != nums[i]){int tmp = nums[nums[i] - 1];nums[nums[i] - 1] = nums[i];nums[i] = tmp;}}for(int i = 0; i < n; i++){if(nums[i] != i + 1){return i + 1;}}return n + 1;}}

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

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

相关文章

RabbitMQ之消费者可靠性

文章目录 前言一、消费者确认机制二、失败重试机制三、失败处理策略四、业务幂等性唯一消息ID业务判断 五、兜底方案总结 前言 当RabbitMQ向消费者投递消息以后&#xff0c;需要知道消费者的处理状态如何。因为消息投递给消费者并不代表就一定被正确消费了&#xff0c;可能出现…

3DMAX平滑布尔插件超级布尔工具使用教程

3dMax平滑布尔插件SmoothBoolean用于在ProBoolean网格之间创建平滑过渡的3dMax插件。再也不需要花几个小时来清理用布尔切割创建的混乱拓扑了。如果你只是想让你的三维模型在渲染图上看起来很棒&#xff0c;或者你需要为游戏烘焙一些东西&#xff0c;那么你就不必浪费时间来建模…

Kotlin学习——kt中的类,数据类 枚举类 密封类,以及对象

Kotlin 是一门现代但已成熟的编程语言&#xff0c;旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作&#xff0c;并提供了多种方式在多个平台间复用代码&#xff0c;以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

个人硬件测试用例入门设计

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 &#x1f324;️功能测试 进行新增、…

Java中绕过SSL/TLS验证:开发与风险透视

警告: 本文提供的方法绕过SSL/TLS证书验证&#xff0c;这在某些开发场景下可能是有用的&#xff0c;但使用这些方法会导致严重的安全隐患。在生产环境中&#xff0c;你应该始终验证SSL/TLS证书以确保数据的安全传输。 引言 在日常的软件开发中&#xff0c;我们经常需要与其他服…

FFmpeg命令分隔视频

有一个视频如a.mp4&#xff0c;此视频采用帧率为30生成&#xff0c;共有299帧&#xff0c;这里通过FFmpeg命令分隔成1秒一个个的小视频&#xff0c;即每个小视频帧数为30帧。 用到的FFmpeg参数如下所示&#xff1a; (1).-i:指定输入视频文件的名称&#xff1b; (2).-c:指…

name 属性:提高 Vue 应用可维护性的关键

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

对称加密与非对称加密的区别是什么?

对称加密与非对称加密的区别是什么&#xff1f; 对称加密概念&#xff1a;好处和坏处&#xff1a;基本原理 非对称加密概念&#xff1a;工作原理&#xff1a; 两者区别安全性处理速度密钥管理通信双方数量 对称加密 概念&#xff1a; 同一个密钥可以同时用来对信息进行加密和…

Sublime Text 3运行 Python文件出现中文打印乱码的解决方式

很多小伙伴在下载安装好sublime这个编辑器后发现&#xff0c;它虽然能够用来打开python脚本和创建文件编写代码&#xff0c;但是却不能够来运行python代码和程序。所以下面这一篇文章就是会来分享一下&#xff0c;sublime编辑器无法运行python的解决方法&#xff0c;感兴趣的话…

Linux环境下自动化创建大量的账号

参考《鸟哥的Linux私房菜基础篇第四版》13.7.2节微调而成&#xff1a; 下面脚本的目的是为服务器的管理员自动化创建大量的账号&#xff0c;节省生命。 #!/bin/bash # This shell script will create amount of Linux login accounts for you. # 1. check the "accounta…

2006-2023年2月地级市城投债数据

2006-2023年2月地级市城投债数据 1、时间&#xff1a;2006-2023年2月 2、指标&#xff1a;省份、城市、证券代码、证券简称、债券简称、证券全称、债券初始面值单位元、债券最新面值交易日期20221231、发行总额单位亿元、债券余额日期20221231单位亿、起息日期、计息截止日、…

React中通过children prop或者React.memo来优化子组件渲染【react性能优化】

文章目录 前言未优化之前的代码问题解决方案一&#xff0c;通过children prop解决方案二&#xff0c;通过React.memo后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;react.js &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和…

基于PyQT5的图像分类网络训练平台

1.主界面 2.选择数据集路径 里面包含两个文件夹 train和val 3.选择类别标签 以txt为结尾 4.训练基本设置 包括输入图像大小、batch size、轮次、学习率等 5.训练高级设置 是否进行标签平滑、图像增强操作 6.选择训练日志输出地址 为一个文件夹 7.选择训练好的模…

1.如何修改seruat对象的行名 2.FeaturePlot如何把所有阳性表达的spot放到图的前面

本有解决标题中的两个问题 1.答案是修改不了&#xff0c;不如重新制作一个seurat对象。 试图使用rownames&#xff08;obj&#xff09;featurenames是不成功的 记录 客户需求遇到一个问题&#xff1a;作者提供的rds文件行名为ensemble id&#xff0c;如何改成gene symbol。 …

【Vue】图片切换

上一篇&#xff1a; vue的指令 https://blog.csdn.net/m0_67930426/article/details/134599378?spm1001.2014.3001.5502 本篇所需要的指令有&#xff1a; v-on v-bind v-show <!DOCTYPE html> <html lang"en"> <head><meta charset"…

人力资源管理后台 === 角色管理

目录 1.组织架构-编辑部门-弹出层获取数据 2.组织架构-编辑部门-编辑表单校验 3.组织架构-编辑部门-确认取消 4.组织架构-删除部门 5.角色管理-搭建页面结构 6.角色管理-获取数据 7.角色管理-表格自定义结构 8.角色管理-分页功能 9.角色管理-新增功能弹层 10.角色管理…

2024年天津天狮学院市场营销专业《管理学》考试大纲

2024年天津天狮学院专升本市场营销专业高职升本入学考试《管理学》考试大纲 一、考试性质 《管理学》专业课程考试是天津天狮学院市场营销专业高职升本入学考试的必考科 目之一&#xff0c;其性质是考核学生是否达到了升入本科继续学习的要求而进行的选拔性考试。《管理学》考…

5、Hydra与Crunch基本使用

文章目录 一、关于Hydra与Crunch二、在操作机上使用Crunch生成用户名和密码字典三、在操作机上使用Hydra对靶机FTP登录密码进行字典攻击 一、关于Hydra与Crunch Hydra&#xff08;九头蛇&#xff09;是一个相当强大的暴力密码破解工具。该工具支持几乎所有协议的在线密码破解&…

目录树自动生成器 golang+fyne

go tree 代码实现请看 gitee 仓库链接 有很多生成目录树的工具&#xff0c;比如windows自带的tree命令&#xff0c;nodejs的treer&#xff0c;tree-cli等等。这些工具都很成熟、很好用&#xff0c;有较完善的功能。 但是&#xff0c;这些工具全部是命令式的&#xff0c;如果…

解密 sqli靶场第一关:一步一步学习 SQL 注入技术

目录 一、判断是否存在注入点 二、构造类似?id1 --的语句 三、判断数据表中的列数 四、使用union联合查询 五、使用group_concat()函数 六、爆出数据库中的表名 七、爆出users表中的列名 八、爆出users表中的数据 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很…