知识的领域是无限的,我们的学习也是无限期的。这篇文章主要讲述算法题每日一练---第58天:错误的集合相关的知识,希望能为你提供帮助。
一、问题描述集合 s
包含从 1
到 n
的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。
给定一个数组 nums
代表了集合 S
发生错误后的结果。
【算法题每日一练---第58天(错误的集合)】请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。
题目链接:错误的集合。
二、题目要求
样例
输入: nums = [1,2,2,4]
输出: [2,3]
考察
1.哈希表(map)
2.建议用时10~25min
三、问题分析本题是位运算的第13题,没了解过位运算相关知识点可以看这一篇文章,讲解比较详细:
算法题每日一练---第45天:位运算。
这一题,一开始我打算向位运算的异或靠拢的,将1~n下标数字与数组元素进行异或,那么最后只剩下一个缺失的下标、一个重复的数组元素。但后来发现不行,异或不能同时保留这两个数字。
文章图片
我又试着搞一下map计数,因为重复数字的哈希值肯定为2,缺失数字的哈希值肯定为1,最后判断一下就行了。
除了这种,还可以排序之后彼此相邻的数字判断是否重复,也可以。
四、编码实现```c++
class Solution
public:
vector< int> findErrorNums(vector< int> & nums)
vector< int> v; //数组存储
int i,n=nums.size(),a,b; //初始化变量
map< int,int> m;
for(i=0; i< n; i++)//计数
m[nums[i]]++;
for(i=1; i< =n; i++)//判断数字
if(m[i]==2)//重复数字
a=i;
if(m[i]==0)//丢失数字
b=i;
v.push_back(a); //插入数字
v.push_back(b); //插入数字
return v; //输出结果
;
## 五、测试结果![1.png](https://s4.51cto.com/images/blog/202205/24112403_628c4fd3c28c820309.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)![2.png](https://s4.51cto.com/images/blog/202205/24112403_628c4fd3e57a942928.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
推荐阅读
- 如何快速集成Android版Serverless认证服务-手机号码篇
- 多进程并发服务器
- centos python3 安装psycopg2 模块
- Calico BGP Full Mesh 跨节点通信
- 系统性能分析
- 简单实现程序DLL劫持
- css(box-shadow层级问题-相邻元素背景遮盖了阴影)
- CentOS 7 命令行下安装VirtualBox
- 优维低代码(编排详解菜单配置)