如何检查数组中是否没有值

How to check if there is no value in the array

本文关键字:是否 数组 何检查 检查      更新时间:2023-10-16

我正在尝试为int arr[]中的3位数字创建一个随机化器,并检查其值。要检查的值是,如果数组有一个双精度,例如(5,5,3(,那么它将获得非重复的ex。(3(。我使用printRepeating来查看数组中是否有重复数字,如果有,它将调用firstNonRepeating函数来获得非重复数字。问题是在printRepeating中,我如何检查arr[I]是否为空,这样它就会调用firstNonRepeating函数,无论它是否为空。因为即使它为空(数组没有重复数字(,它仍然会调用firstNonRepeating((。

int firstNonRepeating(int arr[], int size)  
{ 
cout << "nvalue of roll is ";
for (int x = 0; x < size; x++) { 
int e; 
for (e = 0; e < size; e++) 
if (x != e && arr[x] == arr[e]) 
break; 
if (e == size) 
return arr[x]; 
} 
return -1; 
} 
int printRepeating(int arr[], int size)
{ 
int i, j; 
printf(" Repeating elements are "); 
for(i = 0; i < size; i++) 
for(j = i + 1; j < size; j++) 
if(arr[i] == arr[j]) 
cout << arr[i] << " ";
if(arr[i] != 0)
{
cout << firstNonRepeating(arr, size); 
}
}  

int main() 
{ 
int arr[] = {5, 3, 5}; 
int arr_size = sizeof(arr)/sizeof(arr[0]);  
printRepeating(arr, arr_size); 
}

还有,我有没有办法为此写一个更高效的代码??我只是借用了别人的代码。。。

对于您的特定用例,嵌套循环将每个元素与其他元素匹配,检查是否有重复,这没有错。在一个数字较多的示例中,可以通过多种方式来确定,具体取决于您的约束条件。最简单的方法是创建一个std::unordered_set<int>,并在数组上迭代,检查当前数字是否在unsodered_set中,如果不在,则将数字添加到集合中并继续。示例代码看起来像

#include <unordered_set>
#include <iostream>
#include <vector>
using namespace std;
vector<int> getRepeating(int arr[], int size)
{
vector<int> rv;
unordered_set<int> curr_set;
for(int i = 0; i < size; ++i){
if(curr_set.find(arr[i]) != curr_set.end())
rv.push_back(arr[i]);
curr_set.insert(arr[i]);
}
return rv;
}
int main()
{
int arr[] = {5, 3, 5};
int arr_size = sizeof(arr) / sizeof(arr[0]);
vector<int> repeating = getRepeating(arr, arr_size);
if(repeating.size() == 0)
cout << "no repetition found" << endl;
else{
for(int i = 0; i < repeating.size(); ++i)
cout << i << "th repeating: " << repeating[i] << endl;
}
}

其中getRepeating的返回值将包含所有重复数字的向量