问题描述

集合 S 包含从1到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复。
给定一个数组 nums 代表了集合 S 发生错误后的结果。你的任务是首先寻找到重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。
示例 1:
输入: nums = [1,2,2,4]
输出: [2,3]
注意:
给定数组的长度范围是 [2, 10000]。
给定的数组是无序的。

代码1

首先给出一个利用hash表空间复杂度为O(N)的算法

class Solution {
public:
vector<int> findErrorNums(vector<int>& nums) {
int n = nums.size();
map<int,int> tab;
vector<int> ans(2,-1);
for(int i = 0; i < n; i++)
tab[i+1] = 0;//注意统计的数是从[1,n]
for(int i = 0; i < n; i++)
++tab[nums[i]];//初始化hash表
for(int i = 0; i < n; i++)
{
if(tab[i+1] == 0)ans[1] = i+1;
if(tab[nums[i]] == 2)ans[0] = nums[i];
}
return ans;
}
};

结果:

执行用时 :164 ms, 在所有 C++ 提交中击败了5.60%的用户
内存消耗 :34.2 MB, 在所有 C++ 提交中击败了5.47%的用户

或者使用vector来代替map

class Solution {
public:
vector<int> findErrorNums(vector<int>& nums) {
int n = nums.size();
vector<int> tab(n,0);
vector<int> ans(2,-1);
for(int i = 0; i < n; i++)
++tab[nums[i]-1];//初始化hash表
for(int i = 0; i < n; i++)
{
if(tab[i] == 0)ans[1] = i+1;
if(tab[nums[i]-1] == 2)ans[0] = nums[i];
}
return ans;
}
};

结果:

执行用时 :32 ms, 在所有 C++ 提交中击败了89.26%的用户
内存消耗 :23.2 MB, 在所有 C++ 提交中击败了5.47%的用户

代码2

再给出一个空间复杂度为O(1)的算法,以题目中例子为例:

我们第一遍遍历尝试将所有nums[i]-1所对应的 nums[abs(nums[i]-1)]变为负数,以表示该数已经存在了,如果nums[abs(nums[i]-1)]<0,代表元素nums[i]重复了。,遍历完以后,只有一个索引所对应的nums[i]为正的,这个索引就是缺失的值。

class Solution {
public:
vector<int> findErrorNums(vector<int>& nums) {
int n = nums.size();
vector<int> ans(2,-1);
for(int i = 0; i < n; i++)
{
int index = abs(nums[i]) - 1;
if(nums[index] < 0)ans[0] = fabs(nums[i]);
else nums[index] *= -1;
}
for(int i = 0; i < n; i++)
{
if(nums[i] > 0)ans[1] = i+1;
}
return ans; }
};

结果:

执行用时 :36 ms, 在所有 C++ 提交中击败了73.22%的用户
内存消耗 :22.7 MB, 在所有 C++ 提交中击败了5.47%的用户

leetcode 645. 错误的集合的更多相关文章

  1. Java实现 LeetCode 645 错误的集合(暴力)

    645. 错误的集合 集合 S 包含从1到 n 的整数.不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复. 给定一个数组 n ...

  2. 领扣(LeetCode)错误的集合 个人题解

    集合 S 包含从1到 n 的整数.不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复. 给定一个数组 nums 代表了集合 S ...

  3. LeetCode 645. Set Mismatch (集合不匹配)

    The set S originally contains numbers from 1 to n. But unfortunately, due to the data error, one of ...

  4. [Swift]LeetCode645. 错误的集合 | Set Mismatch

    The set S originally contains numbers from 1 to n. But unfortunately, due to the data error, one of ...

  5. [LeetCode] 78. Subsets 子集合

    Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must be ...

  6. pycharm链接数据库以及连接时候出现错误的集合

    1.pycharm如何直接连接数据库? 作用:这是一种管理数据库的方式而已,因为在开发过程中结合使用还是不错的!当然,还有有很多管理数据库的工具和方法. 比如:navicat工具 1.1  如何找到管 ...

  7. Leetcode645.Set Mismatch错误的集合

    集合 S 包含从1到 n 的整数.不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复. 给定一个数组 nums 代表了集合 S ...

  8. IIS错误处理集合

    1.编译器错误消息: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\ya ...

  9. PHP中错误处理集合

    PHP错误处理 错误的分类 通常分3种: 语法错误: 程序运行之前,都要先检查语法.如果语法有错误,就会立即报错,并且不会去执行程序. 运行时错误: 就是在程序语法检查通过后,,开始运行程序并在此过程 ...

随机推荐

  1. Docker从入门到精通(六)——容器通信

    想要变成 Docker 的高阶玩家,搞懂 Docker 的容器通信是必不可少的. 1.需求 通常一个 Web 项目上线,我们会把开发完成的服务部署在Tomcat 服务器里面,然后需要的持久化数据会存放 ...

  2. 小迪安全 Web安全 基础入门 - 第一天 - 操作系统&名词&文件下载&反弹SHELL&防火墙绕过

    一.专业名词 1.POC:(Proof of Concept),即概念验证.漏洞报告中的POC是一段说明或一个攻击的样例使读者能够确认这个漏洞是真实存在的. 2.EXP:exploit,即漏洞利用.对 ...

  3. CF19A World Football Cup 题解

    Content 有 \(n\) 个球队参加一场足球比赛,比赛排名前 \(\dfrac{n}{2}\) 的队伍将会进入下一轮的淘汰赛.比赛将会打 \(\dfrac{n(n-1)}{2}\) 场,胜者得 ...

  4. java 多线程 发布订阅模式:发布者java.util.concurrent.SubmissionPublisher;订阅者java.util.concurrent.Flow.Subscriber

    1,什么是发布订阅模式? 在软件架构中,发布订阅是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者).而是将发布的消息分为不同的类别,无需了解哪些订阅者(如果有的话 ...

  5. TFTP协议介绍-python实现tftp客户端

    1. TFTP协议介绍 TFTP(Trivial File Transfer Protocol,简单文件传输协议) 是TCP/IP协议族中的一个用来在客户端与服务器之间进行简单文件传输的协议 特点: ...

  6. SpringBoot 整合MinIO

    引入依赖 <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifact ...

  7. 【LeetCode】1208. 尽可能使字符串相等 Get Equal Substrings Within Budget (Python)

    作者: 负雪明烛 id: fuxuemingzhu 公众号:每日算法题 本文关键词:LeetCode,力扣,算法,算法题,字符串,并查集,刷题群 目录 题目描述 示例 解题思路 滑动窗口 代码 刷题心 ...

  8. 【LeetCode】203. Remove Linked List Elements 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 双指针 递归 日期 题目地址:https://lee ...

  9. 利用shiro反序列化注入冰蝎内存马

    利用shiro反序列化注入冰蝎内存马 文章首发先知社区:https://xz.aliyun.com/t/10696 一.shiro反序列化注入内存马 1)tomcat filter内存马 先来看一个普 ...

  10. bootstrap可编辑下拉框jquery.editable-select

    搜了半天发现在某处下载jquery.editable-select需要积分,于是整理出来方便 其他人. 先上下载链接: http://pan.baidu.com/s/1kUXvwlL      pas ...