【发布时间】:2020-09-16 17:42:42
【问题描述】:
我的解决方案是找出一个整数是否在数组中重复,虽然正确,但由于超出了 LeetCode 预期的时间限制而被拒绝。我知道嵌套 for 循环是 O(n^2) 的罪魁祸首。有没有办法在不使用哈希的情况下以任何有意义的方式减少这种情况?
bool containsDuplicate(int* nums, int numsSize){
bool result = 0;
for( int i = 0; i < numsSize; i++)
{
for ( int j = 1; j < (numsSize - i); j++)
{
if(nums[i] == nums[i + j])
{
result = 1;
}
}
}
return result;
}
【问题讨论】:
-
你可以对数组进行排序,看看是否有两个连续的值相同。它将解决 O(nlogn) 中的问题
-
使用一个Set,每次检查元素是否已经插入(O(1)),如果没有,插入它,否则你有一个重复,所以每次迭代你做一个O(1 ) 操作,并且您最多会执行 n 次,因此您最终会得到一个 O(n) 解决方案(但您最多会消耗 O(n) 内存,但这里似乎不是问题)
-
数组中有多少项?
-
@DeepakPatankar 对整个数组进行排序以找到重复项?..
-
我建议一个不使用哈希的解决方案。是的,它不是一个有效的。
标签: c++ arrays algorithm data-structures