gpt4 book ai didi

c - 数组中不同的唯一元素

转载 作者:行者123 更新时间:2023-12-03 23:09:14 25 4
gpt4 key购买 nike

我尝试编写代码来计算给定数组中不同唯一元素的数量,但我得到了不需要的输出。{ 2, 7, 5, 8, 9, 5, 7, 5, 5, 3}这是给定的数组元素。不同的唯一值是 { 2, 8, 9, 3} 这意味着有 4。但我的程序返回 6:{ 2, 5, 8, 9 , 7, 3}

这是我的代码:

 #include <stdio.h>
#include <stdlib.h>


int unique(int *arr, int n)
{
int u = 1;

for (int i = 1; i < n; ++i)
{
int is_u = 1;
for (int j = 0; is_u && j < i; ++j)
{
if (arr[j] == arr[i]) is_u = 0;
}
if (is_u) ++u;
}
return u;
}


int main(void) {
int arr[] = { 2, 7, 5, 8, 9, 5, 7, 5, 5, 3};
int n = sizeof(arr) / sizeof(arr[0]);
printf("%d", unique(arr, n));
return 0;
}

最佳答案

您需要检查整个数组(目前您的内部循环只到 i)。

    for (int j = 0; is_u && j < n; ++j)
{
/* i != j to avoid comparing an element with itself. */
if (i != j && arr[j] == arr[i]) is_u = 0;
}

你的显然是一个 O(n*n) 算法。您可以对后续元素进行排序和检查,以在 O(n log n) 中执行相同的操作。

如果你可以使用额外的 O(n) 内存来使用辅助数组作为“计数器”,那么它也可以在 O(n) 的时间复杂度内完成。

关于c - 数组中不同的唯一元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53411368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com