剑指offer题解 | #数组中重复的数字#
数组中重复的数字
https://www.nowcoder.com/practice/6fe361ede7e54db1b84adc81d09d8524
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numbers int整型一维数组
* @param numbersLen int numbers数组长度
* @return int整型
*/
#include <stdbool.h>
int duplicate(int* numbers, int numbersLen )
{
// write code here
/* 两层循环暴力遍历
for(int a=0;a<=numbersLen-2;a++)
{
for(int b=a+1;b<=numbersLen-1;b++)
{
if(numbers[a]==numbers[b])
{
return numbers[a];
}
}
}
return -1;
*/
/*两层循环排序再一层遍历
for(int a=0;a<=numbersLen-2;a++)
{
for(int b=a+1;b<=numbersLen-1;b++)
{
if(numbers[a]>numbers[b])
{
int t=0;
t=numbers[a];
numbers[a]=numbers[b];
numbers[b]=t;
}
}
}
for(int a=0;a<=numbersLen-2;a++)
{
if(numbers[a]==numbers[a+1])
{
return numbers[a];
}
}
return -1;
*/
/*下标法
int i = 0;
int t = 0;
while (i < numbersLen) {
if (i == numbers[i]) {
i++;
}
else {
if (numbers[numbers[i]] == numbers[i]) {
return numbers[i];
}
else {
// 交换
t=numbers[numbers[i]];
numbers[numbers[i]]=numbers[i];
numbers[i]=t;
}
}
}
return -1;
*/
/*哈希count和map查字典发以及布尔数组法(核心思想一样)*/
bool bol[10000]={0};
for(int i=0;i<numbersLen;i++)
{
if(bol[numbers[i]]!=0)
{
return numbers[i];
}
bol[numbers[i]] = 1;
}
return -1;
}
小新练习随记,勿喷谢谢
