《剑指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——找出数组中重复的数字》代码的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer 03.数组中重复的数字

剑指offer 03.数组中重复的数字

剑指 Offer 03. 数组中重复的数字 的 详细题解

剑指Offer03. 数组中重复的数字(哈希)

剑指Offer03. 数组中重复的数字(哈希)

剑指offer五十之数组中重复的数字