题解 | #数组中只出现一次的两个数字#

数组中只出现一次的两个数字

http://www.nowcoder.com/practice/389fc1c3d3be4479a154f63f495abff8

题目:
描述
一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
示例1
输入:[1,4,1,6]
返回值:[4,6]
说明:返回的结果中较小的数排在前面

前面剑指offer关于数组重复的问题已经有了几道,思路很像,但是自己想到的并不多,还是要多多进行复习。
方法一:
hash方法:通过hash表的方法建立对应的key-value,再对hash表进行遍历,找到对应的出现一次的array[i]。因为对数据的排序有要求,因此使用了swap()进行交换。
vector<int> FindNumsAppearOnce(vector<int>& array) {
// write code here
vector<int>B;//新定义的数组,可以不定义大小
unordered_map<int,int>map;
int j = 0;
for(int i = 0; i < array.size(); i++)
{
map[array[i]]++;
}
for(int i = 0; i < array.size();i++)
{
if(map[array[i]] == 1)
{
B.push_back(array[i]); //尾部插入元素array[i]
}
}
if(B[0] > B[1])
{
swap(B[0],B[1]);
}
return B;
}
时间复杂度:O(n)
空间复杂度:O(n)</int></int></int>

本题的方法二使用的是位运算,没有看懂。

全部评论

相关推荐

只写bug的程序媛:人家说一本以上,不是及以上
点赞 评论 收藏
分享
2024-12-31 09:44
武汉理工大学 Java
程序员牛肉:暑假实习是面向大三招收的哦。你才27届不用急哦。 第一点:在简历的实习板块中简单描述一下你的业务,你说你做了什么什么模块,那你这个模块是在哪个项目中的?简单介绍一下你做的模块所隶属的项目。项目那块挖的还是不够深,先不用着急更新简历,可以再沉淀个四五天。 实习要是让面试官觉得是包装出来的话,是一件很严重的问题,说难听点就是造假。互联网很看重诚信问题,你一旦出现了这种诚信问题,基本这辈子就距离大厂无缘了 2.不要贴任何链接了,没啥用而且很影响美观。有的时候让面试管看着顺不顺眼也是一个是否约你面试的影响因素。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务