leetcode 645. 错误的集合
2024-10-18 10:00:46
问题描述
集合 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%的用户
最新文章
- Apache安装问题:configure: error: APR not found . Please read the documentation
- 基本概率分布Basic Concept of Probability Distributions 3: Geometric Distribution
- buildbot的codebaseGenerator
- 利用Httponly提升web应用程序安全性
- Uedit的快捷键
- Squid代理服务器&;&;搭建透明代理网关服务器
- QTP、LoadRunner、QC工具下载地址
- Tomcat Server 原理
- docker 容器扩盘
- sharedMesh变量
- animate动画被锁在队列中不动怎么解决
- 关于虚拟机打开ubuntu黑屏的问题
- BZOJ 3622
- office图标(word,powerpoint,excel)异常(变成白板)问题修复
- docker环境安装与开启远程访问
- python装饰器1:函数装饰器详解
- 行为型---中介者模式(Mediator Pattern)
- 【NOI2019模拟】搬砖
- How to enable mp3 on Ubuntu
- OSS命令行工具ossutil
热门文章
- 使用.NET 6开发TodoList应用(1)——系列背景
- MyBatis 3学习笔记
- CF701A Cards 题解
- 针对HttpClient 重写 HttpRequestRetryHandler针对特定异常 增加重试
- mongodb 64位操作系统下载地址
- jquery autocomplete 插件的使用
- JAVA获取请求的IP地址
- 【LeetCode】131. Palindrome Partitioning 解题报告(Python & C++)
- LeetCode 第三大的数414. Third Maximum Number
- anaconda 如何更换镜像源