题目链接:leetcode442
题面

题目大意
略
解题思路
哈希
这种问题大致可以分成两类,如果找重复两次的数可以用哈希;如果找不重复的数可以用异或,然后按某个位为 1 开始划分。
本题要找重复两次的数,于是可以采用哈希,具体就是使得 n u m s ( i ) = = i nums(i)==i nums(i)==i ,这样不重复的数一定归位,而重复的数一定有一个不能归位,那么找出那些不能归位的数即可。
代码实现
class Solution {
public:
vector<int> findDuplicates(vector<int>& nums) {
std::ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
vector<int> res;
for (int i = 0; i < nums.size(); i++) {
while (nums[nums[i]-1] != nums[i])
swap(nums[nums[i]-1], nums[i]);
}
for (int i = 0; i < nums.size(); i++) {
if (nums[i] != i+1) {
res.push_back(nums[i]);
}
}
return res;
}
};

这篇博客介绍了LeetCode第442题的解题思路和代码实现。通过使用哈希的方法,找到数组中重复出现两次的数字。代码中展示了如何遍历数组并交换元素,使不重复的数归位,然后找出未归位的重复数。
2126

被折叠的 条评论
为什么被折叠?



