Welcome
admin
admin

2025-12-24 12:53:52

世界杯误判
900 417

在C语言中,我们可以使用类似的方法来实现判断数组中是否有重复值的功能。由于C语言没有内置的哈希集合(如Python的set或C++的unordered_set),我们需要自己实现一个简单的哈希表或使用其他方法。

方法一:暴力法(双重循环) 时间复杂度:O(n²) 空间复杂度:O(1)

#include

bool containsDuplicate(int* nums, int numsSize) {

for (int i = 0; i < numsSize; i++) {

for (int j = i + 1; j < numsSize; j++) {

if (nums[i] == nums[j]) {

return true;

}

}

}

return false;

}

说明:

使用双重循环比较每一对元素。

如果发现相同的元素,立即返回true。

遍历结束后仍未发现重复,返回false。

方法二:先排序后比较相邻元素 时间复杂度:O(n log n)(取决于排序算法) 空间复杂度:O(1)(如果原地排序)

#include

#include

// 比较函数,用于qsort

int compare(const void* a, const void* b) {

return (*(int*)a - *(int*)b);

}

bool containsDuplicate(int* nums, int numsSize) {

qsort(nums, numsSize, sizeof(int), compare); // 使用标准库的快速排序

for (int i = 0; i < numsSize - 1; i++) {

if (nums[i] == nums[i + 1]) {

return true;

}

}

return false;

}

说明:

使用qsort对数组进行排序(时间复杂度一般为O(n log n))。

遍历排序后的数组,检查相邻元素是否相同。

如果发现相同,返回true;否则返回false。

方法三:简单哈希表(适用于元素范围较小的情况) 时间复杂度:O(n) 空间复杂度:O(k)(k为元素的范围)

如果已知数组元素的范围较小(例如0 <= nums[i] <= 1000),可以用数组模拟哈希表:

#include

#include

bool containsDuplicate(int