注意:这些元素是具有10位数字的数字,是一个包含占用位置的矩阵,这不是一个选择
答案 0 :(得分:0)
如果您想仅一次存储所有元素 ,则可以在{{1中使用 STL set }}(下面在c++
中提供了一个示例)。它存储的值不超过一次。您可以像这样声明设置:
c
要在设置
中插入值set<int>sett;
要打印集合中的所有值:
sett.insert(6);
您可以访问geekforgeek和cplusplus网站以获取更多信息。
如果要跟踪数字是否在数组中,则可以像这样高效地进行跟踪:
获取一个布尔数组或映射,并使其全部为初始值for(auto a: sett){
cout<<a<<endl;
}
。从文件扫描后,如果数字为N,则使布尔数组或映射false
的第N个索引。
现在,如果要检查数字M是否在数组中。您可以通过检查布尔数组或Map的Mth索引是否仅在O(1)时间内为true
来轻松获得此结果。
请参见下面的示例,这是使用布尔数组完成的。如果布尔数组的大小过大,请记住要全局清除布尔数组。您也可以在true
中使用 STL Map 来完成此操作。要了解有关 SLT MAP 的更多信息,请访问cplusplus,cppreference,geeksforgeeks。
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