《剑指Offer——找出数组中重复的数字》代码
Posted 穿迷彩服的鲨鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《剑指Offer——找出数组中重复的数字》代码相关的知识,希望对你有一定的参考价值。
前言
//==================================================================
// 《剑指Offer——找出数组中重复的数字》代码
// 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,
// 也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},
// 那么对应的输出是重复的数字2或者3。
//==================================================================
一、示例
示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
二、代码解析
1.新建.cpp文件
代码如下(示例):
//==================================================================
// 《剑指Offer——找出数组中重复的数字》代码
// 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,
// 也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},
// 那么对应的输出是重复的数字2或者3。
//==================================================================
#include<iostream>
#include<vector>
#include<unordered_map>
#include<algorithm>
using namespace std;
/*哈希表*/
int findRepeatNumber1(vector<int>& nums)
{
unordered_map<int, bool> map;
for (int num : nums)
{
if (map[num])
{
return num;
}
map[num] = true;
}
return -1;
}
/*排序*/
int findRepeatNumber2(vector<int>& nums)
{
int temp = -1;
sort(nums.begin(), nums.end());
for (int i = 0; i < nums.size(); i++)
{
if (temp == nums[i])
{
return temp;
}
else
{
temp = nums[i];
}
}
return -1;
}
/*法三*/
bool Duplicate(vector<int> numbers, int length, int* duplication)
{
if (numbers.size() == 0 || length <= 0)
{
return false;
}
for (int i = 0; i < length; ++i)
{
if (numbers[i]<0 || numbers[i]>length - 1)
{
return false;
}
}
for (int i = 0; i < length; ++i)
{
while (numbers[i] != i)
{
if (numbers[i] == numbers[numbers[i]])
{
*duplication = numbers[i];
return true;
}
int temp = numbers[i];
numbers[i] = numbers[temp];
numbers[temp] = temp;
}
}
return false;
}
int main(void)
{
vector<int> nums = { 2,3,1,0,2,5,3 };
/*测试法一*/
cout << findRepeatNumber1(nums) << endl;
/*测试法二*/
cout << findRepeatNumber2(nums) << endl;
/*测试法三*/
int dp=0;
Duplicate(nums, nums.size(), &dp);
cout << dp << endl;
return 0;
}
2.测试
以上是关于《剑指Offer——找出数组中重复的数字》代码的主要内容,如果未能解决你的问题,请参考以下文章