📣🥳🥳🥳📣
✨Hello! 如果这篇【文章】对你有帮助😄,希望可以给博主点个赞👍鼓励一下😘
📣🥳🥳🥳📣
🔎 题目描述
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
输入:[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
限制:2 <= n <= 100000
📝 解题方法
【vector
类型的题目】
📌 排序法
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
//1.先排序
sort(nums.begin(), nums.end());
//2.再查找重复数字
int front;
for (auto rear : nums) {
if (rear == front) {
return rear;
}
front = rear;
}
return -1;
}
};
时间复杂度取决于sort
,若是快排则为O(Nlog2N);
空间复杂度受sort
影响,若是快排则为O(log2N)。
📌 哈希表法
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
unordered_map<int, bool> map;
for (auto value : nums) {
if (map[value]) {
return value;
}
map[value] = true;
}
return -1;
}
};
时间复杂度O(N),数组越长越能体现;
空间复杂度O(N)。
✨如有问题欢迎在底下评论留言或私信!
如果这篇【文章】对你有帮助😄,希望可以给博主【点个赞👍】鼓励一下😘
❤️Thanks for your encouragement❤️