如何在没有重复的数组中插入元素?

时间:2019-01-31 22:14:29

标签: c

我想用c语言编写一个高效的程序,该程序读取文件中的元素并将其放入数组中。我的想法是要有一个函数来查找数组中是否存在每个元素,但是它花费的时间太长,每个文件都具有数百万个元素(重复)。您是否知道如何将这些元素插入到数组中而不重复?

注意:这些元素是具有10位数字的数字,是一个包含占用位置的矩阵,这不是一个选择

1 个答案:

答案 0 :(得分:0)

如果您想仅一次存储所有元素 ,则可以在{{1中使用 STL set }}(下面在c++中提供了一个示例)。它存储的值不超过一次。您可以像这样声明设置

c

要在设置

中插入值
set<int>sett;

要打印集合中的所有值:

sett.insert(6);

您可以访问geekforgeekcplusplus网站以获取更多信息。

如果要跟踪数字是否在数组中,则可以像这样高效地进行跟踪:

获取一个布尔数组映射,并使其全部为初始值for(auto a: sett){ cout<<a<<endl; } 。从文件扫描后,如果数字为N,则使布尔数组或映射false的第N个索引。

现在,如果要检查数字M是否在数组中。您可以通过检查布尔数组或Map的Mth索引是否仅在O(1)时间内为true来轻松获得此结果。

请参见下面的示例,这是使用布尔数组完成的。如果布尔数组的大小过大,请记住要全局清除布尔数组。您也可以在true中使用 STL Map 来完成此操作。要了解有关 SLT MAP 的更多信息,请访问cpluspluscppreferencegeeksforgeeks

c++

您还可以使用此技巧在数组中不包含重复值。为此,如果输入的数字是“ a”。检查#include <stdio.h> #include <stdbool.h> bool mapp[999999999] = {false}; int main() { int i, n, t, m, ara[1000]; printf("Input the size of array: "); scanf("%d", &n); for(i = 0; i < n; i++){ scanf("%d", &ara[i]); mapp[ara[i]] = true; } printf("Input number of time you want to check a number in array or not: "); scanf("%d", &t); while(t--){ scanf("%d", &m); if(mapp[m] == true) printf("Number Exists\n"); else printf("Number Not Exists\n"); } } 是否已被标记为mapp[a]。仅在数组true中包括'a'。这个小小的改变将排除数组中所有重复的值。

mapp[a] != ture