在C语言中,我们可以使用类似的方法来实现判断数组中是否有重复值的功能。由于C语言没有内置的哈希集合(如Python的set或C++的unordered_set),我们需要自己实现一个简单的哈希表或使用其他方法。
方法一:暴力法(双重循环)
时间复杂度:O(n²)
空间复杂度:O(1)
#include <stdbool.h>
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 <stdbool.h>
#include <stdlib.h>
// 比较函数,用于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 <stdbool.h>
#include <string.h>
bool containsDuplicate(int

最低0.47元/天 解锁文章
677

被折叠的 条评论
为什么被折叠?



