找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
限制:
2 <= n <= 100000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
自己的解法1:建立一个哈希表,牺牲空间,存储每个数字出现过的次数,一旦某个数字出现多于一次,即跳出循环,返回该数字。时间复杂度 O(n)。
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
int len = nums.size();
vector<int> flag(len, 0);
int res = 0;
for(int i = 0; i < len; ++i)
{
if(flag[nums[i]] > 0)
{
res = nums[i];
break;
}
else
{
flag[nums[i]] += 1;
}
}
return res;
}
};
执行用时:80 ms, 在所有 C++ 提交中击败了92.51%的用户
内存消耗:23.2 MB, 在所有 C++ 提交中击败了42.89%的用户
优点:时间复杂度相对低
缺点:占用内存大