算法没有学怎么办?哈希表不知道怎么办?
在我这里通通不需要,只通过大一刚学的知识就可以快速做出!
仅需要三步:
(1)初始化一个新的数组(萌新表示申请新的内存初始化掌握并不熟练),因此只用for循环手动初始化。
(2)遍历数组,因为只会存在0~n-1的数字,如果存在重复的数字,则一个索引会对应多个相同的数字。
(3)对每次索引的数字+1,循环到出现第一次重复的数字时,返回这个重复的数字,若均不重复,则返回-1。
int findRepeatNumber(int* nums, int numsSize){
int i;
int arr[numsSize];
for(i=0; i<numsSize;i++)
{
arr[i] = 0;
}
for(i=0;i<numsSize;i++)
{
if(arr[nums[i]]>=1)
{
return nums[i];
}
else
{
arr[nums[i]]++;
}
}
return -1;
}
第二部没有看懂
供参考:
int findRepeatNumber(int* nums, int numsSize) {
int i;
int arr[numsSize];
for (i = 0; i < numsSize; i++) // 数组 arr[] 元素初始化为 0
{
arr[i] = 0;
}
for (i = 0; i < numsSize; i++)
{
if (arr[nums[i]] >= 1) // arr[]数组元素下标为 nums[i]值位置的元素 >=1 时,表明这个数字nums[i]第二次出现了
{
return nums[i]; // 返回第一次出现的重复数字 nums[i]
}
else
{
arr[nums[i]]++; // 假如 nums[i] = 9, arr[9]++ ,数组 arr[]第9个元素值为 1,a[9] = 1
}
}
return -1;
}
显然,他的意思是对于输入的数组里面的值nums[i]的范围在0n-1之间,这样定义一个新的数组,全部赋初值为0,再将输入数组中的元素作为索引,判断新数组的值是否为零,为零则++;不为零即为已经出现过一次,返回该值;但显然他这一个算法只能在范围0n-1内适用,且只能找到第一个重复的元素,无法找到所有重复的元素,如果想找到所有重复元素可以将返回一个数组;如果对map或者hash有所了解应该能立马看明白