数组中重复出现的数字(修改数组实现)

数组中重复出现的数字

方案一、

在一个长度为n的数组里的所有数字都是1-(n-1)的范围内,数组中的某些数字是重复的,
但不知道有哪几个数字重复,也不知道重复几次,请找出任意一个重复的数字,例如:输入长度为7的数组
arr[7] = {2,3,1,0,2,5,3};
那么输出对应的数字是2或3
利用哈希表:
分析步骤:
2 3 1 0 2 5 3 | arr[0] != 0
1 3 2 0 2 5 3 | 交换
3 1 2 0 2 5 3
0 1 2 3 2 5 3 |此时
arr[i] = i;i<4
arr[4] != 4;   arr[4] == 2 == arr[2];
return 2;
arr[5] == 5;
arr[6] != 6;   arr[6] == arr[3]
return 3;
写出如下代码:
bool FindRepeat(int arr[], int length, int *dest)
	{
		if(arr == nullptr || length <= 0)
		{
			return false;
		}
		int i = 0;
		for(i=0;i<=length-1;++i)
		{
			if(arr[i]<0 || arr[i] > length-1)
			{
				return false;
			}
		}
		for(i=0;i<=length-1;++i)
		{
			while(arr[i] != i)
			{
				if(arr[i] == arr[arr[i]])
				{
					*dest = arr[i];
					return true;
				}
				int temp = arr[i];
				arr[i] = arr[temp];
				arr[temp] = temp;
			}
		}
		return false;
	}

 
 

方案二、

先对数组进行排序,接下来在排好序的数组找重复出现的并返回:

未优化后的代码:仅仅考虑输入数组有效的情况

#include<stdio.h>
void findrepeat(int arr[], int size)
{
    int i = 0;
    for(i=0;i<size;i++)
    {
	int j = 0;
	for(j=0;j<size-i-1;j++)
	{
            if(arr[j]>arr[j+1])
            {
		int temp = arr[j];
		arr[j] = arr[j+1];
		arr[j+1] = temp;
            }
	}
    }
    for(i=0;i<size;i++)
    {
	if(arr[i] == arr[i+1])
	{
	    printf("%d\n",arr[i]);
 	    break;
	}
    }
}
int main()
{
    int arr[] = {2,3,1,0,2,5,3};
    int size = sizeof(arr)/sizeof(arr[0]);
    findrepeat(arr, size);
    return 0;
}
先对数组进行排序,接下来在排好序的数组找重复出现的并返回:优化后的代码:
数组中重复出现的数字
#include<stdio.h>
int findrepeat(int arr[], int size)
{
	int i = 0;
	int tmp = 0;
	if(arr == NULL || size<=0)          //判定传入数组是否为空
	{
		return 0;
	}
	for(i=0;i<size;i++)                 //判定传入数组是否满足题意
	{
		if(arr[i]<0 || arr[i]>size-1)
		{
			return 0;
		}
	}
	for(i=0;i<size;i++)               //冒泡排序
	{
		int j = 0;
		for(j=0;j<size-i-1;j++)
		{
			if(arr[j]>arr[j+1])
			{
				int temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}
	}
	for(i=0;i<size;i++)               //找重复出现的数字并返回打印 
	{
		if(arr[i] == arr[i+1])
		{
			tmp = arr[i];
			break;
		}
	}return tmp;
}
int main()
{
	int arr[] = {2,3,1,0,2,5,3};
	int size = sizeof(arr)/sizeof(arr[0]);
	printf("%d\n",findrepeat(arr, size));
}


猜你喜欢

转载自blog.csdn.net/qq_41880190/article/details/80415563
今日推荐