bool containsDuplicate(int* nums, int numsSize) {
//先找到数组中的最大数max
int max = nums[0];
for (int i = 0;i < numsSize;i++)
{
if (nums[i] > max) max = nums[i];
}
//找出最大值max后 给数组a申请一片 max*sizeof(int) 大小的空间,并且清零
int *a = (int*)malloc(max * sizeof(int));
for (int i = 0;i < max;i++)
{
a[i] = 0;
}
int n=0;
//遍历nums数组,提取nums数组中的数赋值,使a数组该下标-1的数累加
for (int i = 0;i < numsSize;i++)
{
n = nums[i];
a[n-1]=a[n-1]+1;
}
//遍历数组a,看是否有数大于1若有则返回ture,且输出该数,若无则返回false
bool again = false;
for (int i = 0;i < max;i++)
{
if (a[i] > 1)
{
again = true;
// printf("%d", i+1);
}
}
return again;
}存在访问溢出错误,未找到具体解决方法。
知道错误点是在下段程序,但并未想到为何访问数组下标溢出。
//遍历nums数组,提取nums数组中的数赋值,使a数组该下标-1的数累加
for (int i = 0;i < numsSize;i++)
{
n = nums[i];
a[n-1]=a[n-1]+1;
}