【发布时间】:2023-01-19 02:13:39
【问题描述】:
一个未排序的整数数组 nums,它的大小 numsSize 作为函数 containsDuplicate 的参数给出,如果至少存在一个重复值,我们必须返回一个布尔值 true,否则返回 false。 对于这个任务,我选择检查每个元素以及之后的元素是否相等,直到到达最后一个第二个元素,如果相等,我将返回 true,否则返回 false。
bool containsDuplicate(int* nums, int numsSize){
for(int i =0 ;i< numsSize-1;i++)
{
for(int j = i+1;j < numsSize; j++)
{
if(nums[i] == nums[j])
{
return true;
}
}
}
return false;
}
为了最大限度地减少运行时间,我只在找到重复项时写了返回值,但我的代码在大型数组上仍然表现不佳,我希望算法的时间复杂度 O(n) 如果可能的话。无论如何我们可以跳过与之前查看的值重复的值吗? 我已经看过所有其他解决方案,但找不到更好的解决方案 C.
【问题讨论】:
-
注意该函数应该声明为 bool containsDuplicate( const int* nums, size_t numsSize);那就是函数不应更改传递的数组。:)
标签: c data-structures