领扣(LeetCode)错误的集合 个人题解
集合 S 包含从1到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复。
给定一个数组 nums 代表了集合 S 发生错误后的结果。你的任务是首先寻找到重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。
示例 1:
输入: nums = [1,2,2,4]
输出: [2,3]
注意:
- 给定数组的长度范围是 [2, 10000]。
- 给定的数组是无序的。
拿到这题,正常的思路,拿一个hashmap记录出现的次数,如果多次出现即为重复的数,记录下来。然后用另外一个循环记录缺失的数。执行速度不稳定,最高打败了50%的人
代码如下:
 class Solution {
     public int[] findErrorNums(int[] nums) {
         int[] ans = new int[2];
         Map<Integer, Integer> map = new HashMap<>();
         for (int i = 0; i < ans.length; i++) {
             if (!map.containsKey(ans[i])) {
                 map.put(nums[i], 1);
             } else {
                 ans[0] = nums[i];
             }
         }
         for (int i = 0; i < nums.length; i++) {
             if (!map.containsKey(ans[i])) {
                 ans[1] = nums[i];
                 break;
             }
         }
         return ans;
     }
 }
考虑到Map的查找效率不是太高,于是改进版使用了一个标记数组来代替Map的功能。道理是一样的。形如 :标记数组[nums的值]=nums的值出现的个数
首先赋值标记数组全部为0,然后遍历nums给标记数组赋值,最后遍历标记数组,如果标记数组在index的值为2,则index这个数重复了两次,如果在index这个位置的值为0,则说明index这个数没有出现过。
这样做的效率变高了许多。
代码如下:
 class Solution {
     public int[] findErrorNums(int[] nums) {
         int[] ans = new int[2];
         int[] mark=new int[nums.length+1];
         Arrays.fill(mark, 0);
         for(int i=0;i<nums.length;i++)
         {
             mark[nums[i]]++;
         }
         for(int i=1;i<mark.length;i++)
         {
             if(mark[i]==2)
                 ans[0]=i;
             if(mark[i]==0)
                 ans[1]=i;
         }
         return ans;
     }
 }
领扣(LeetCode)错误的集合 个人题解的更多相关文章
- 领扣[LeetCode]从零开始[使用C++][1,10]
		0.序 以后不做后端开发是不是就用不到C++了?真香.话不多说,我已经躺倒在第一题上了.不贴题目了,持续更新. 1.两数之和 原文:https://www.cnblogs.com/grandyang/ ... 
- 领扣(LeetCode)第三大的数  个人题解
		给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1. 示例 2 ... 
- 领扣(LeetCode)删除链表中的节点 个人题解
		请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 -- head = [4,5,1,9],它可以表示为: 4 -> 5 -> 1 - ... 
- Java实现 LeetCode 645 错误的集合(暴力)
		645. 错误的集合 集合 S 包含从1到 n 的整数.不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复. 给定一个数组 n ... 
- 【力扣leetcode】-787. K站中转内最便宜的航班
		题目描述: 有 n 个城市通过一些航班连接.给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,以价格 p ... 
- C#版 - Leetcode 13. 罗马数字转整数 - 题解
		C#版 - Leetcode 13. 罗马数字转整数 - 题解 Leetcode 13. Roman to Integer 在线提交: https://leetcode.com/problems/ro ... 
- C#版 - Leetcode 633. 平方数之和 - 题解
		版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ... 
- C#版 - Leetcode 593. 有效的正方形 - 题解
		版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ... 
- C#版[击败100.00%的提交] - Leetcode 6. Z字形变换 - 题解
		版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ... 
随机推荐
- SpringBoot项目配置Tomcat和JVM参数
			设置Tomcat端口号和连接数等 使用application.properties配置文件有一些参数无法设置,所以推荐创建一个类文件来配置,如下: package com.qipai.springbe ... 
- Maven安装和在IDEA配置Maven
			一.Windows安装Maven 1.下载Maven 这里需要注意:不要去官网下载最新的版本,因为会出现与IDEA不兼容的现象. 这里提供下载地址:https://archive.apache.org ... 
- python学习-文件I/O
			12.2使用os.path操作目录 # os.path_test.py import os import time print(os.path.abspath("abc.txt") ... 
- 本月16日SpringBoot2.2发布,有哪些变化先知晓
			本月(2019年10月16日)Spring Boot 2.2已经正式发布了!在此篇文章中,将给大家介绍一下2.2版为大家带来了哪些重要的新变化.笔者用心书写,希望阅读完成之后转发关注,你的支持是我不竭 ... 
- Django之CBV视图源码分析(工作原理)
			1.首先我们先在urls.py定义CBV的路由匹配. FBV的路由匹配: 2.然后,在views.py创建一名为MyReg的类: 注意:该类必须继续View类,且方法名必须与请求方式相同(后面会详解) ... 
- 百万年薪python之路  --   函数的动态参数练习
			1.继续整理函数相关知识点. 2.写函数,接收n个数字,求这些参数数字的和.(动态传参) def func(*args,**kwargs): num_sum = 0 num_dic = [] num ... 
- 使用 git bisect 定位你的 BUG
			Git 是开发者的好帮手,今天跟大家分享的是用 git bisect 来找到你代码中的 bad commit . 背景 你可能遇到过这种情况, 昨天下班前把模块开发完了, 单元测试验证通过, git ... 
- WebSocket原理及技术简介
			摘要: WebSocket用于在Web浏览器和服务器之间进行任意的双向数据传输的一种技术.WebSocket协议基于TCP协议实现,包含初始的握手过程,以及后续的多次数据帧双向传输过程.其目的是在We ... 
- Java编程思想——第17章 容器深入研究(two)
			六.队列 排队,先进先出.除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: add ... 
- 【JAVA】可视化计算器
			import java.awt.Color; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.Actio ... 
