面试题03. 数组中重复的数字
难度简单38
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
[code]输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3
我的思路:
1.排序;
2.由于数字在0~n-1区间,所以当位置i与数字nums[i]不相等时,输出重复???
后来发现这个思路错了,
例如:
输入:[3, 1, 2, 3]
输出:1
预期:3
因此改为,当nums[i+1]==nums[i]时,输出重复数字;
不过又发现一个问题,i的范围为0~n-1,如果i=n-1,此时i+1=n,nums
数组越界;
代码如下:
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
if(nums.size()<=0) return -1;
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();i++){
if(nums[i+1]==nums[i]) return nums[i];
}
return nums[nums.size()-1];
}
};
其余题解的思路:
一、
由于数字范围都在0~n-1之内,考虑利用一个大小和nums相同的布尔数组记录某个数字是否出现过,如果当前数字没有出现过(对应flag为false),将对应flag标记为true;如果当前数字对应flag为true,说明出现过,将其输出。
//1
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
bool flag[nums.size()];
memset(flag, false, sizeof(flag));
for(int i = 0; i < nums.size(); i++)
if(flag[nums[i]])
return nums[i];
else
flag[nums[i]] = true;
return -1;
}
};
- 点赞
- 收藏
- 分享
- 文章举报
- leetcode--面试题03.数组中重复的数字
- 【刷题】面试题03. 数组中重复的数字
- 《剑指offer》面试题03:数组中重复的数字
- 【LeetCode6】剑指offer.面试题03. 数组中重复的数字
- 面试题03. 数组中重复的数字
- (剑指Offer)面试题03. 数组中重复的数字&面试题04. 二维数组中的查找
- 剑指Offer——面试题51:数组中重复的数字
- 面试题51. 数组中重复的数字
- 《剑指Offer》学习笔记--面试题51:数组中重复的数字
- 【剑指Offer学习】【面试题51:数组中重复的数字】
- 【剑指offer】面试题3-数组中的重复数字
- 剑指offer 面试题3:数组中重复的数字
- 【我解C语言面试题系列】008 去除数组中重复数字问题
- 面试题51:数组中重复的数字
- 面试题3:数组中重复的数字
- 【我解C语言面试题系列】008 去除数组中重复数字问题
- C++找出数组中重复的数字( 剑指offer面试题3-1)
- 剑指offer面试题51 数组中重复的数字
- 面试题 51: 数组中重复的数字
- 面试题51:数组中重复的数字