如何检查数组中是否没有值
How to check if there is no value in the array
我正在尝试为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的返回值将包含所有重复数字的向量
相关文章:
- 如何找到大小'x'数组是否完全填充,在C++?
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 是否基于数组B整数打印数组A中的整数
- 检查TCHAR数组输入是否为带符号整数C++
- 堆栈和队列是否像C++中的数组一样传递?
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 是否假定reinterpret_cast<char*>(myTypePtr)指向数组?
- 如果分配数组引发异常,是否应该释放该数组
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 我是否不正确地集中了这些字符数组?
- 是否可以就地构造一个固定大小的数组作为函数参数?
- 在 c++ 中是否允许创建具有运行时边界的数组?
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 检查输入 std::array 指针数据是否等于某个常量数组
- 给定一个大小为 N 的数组 S,检查是否可以将序列拆分为两个序列
- C++:在多个线程中访问同一数组/向量的不同单元格是否会产生数据竞赛?
- 将对象的字节复制到数组并再次复制回来是否安全
- 是否可以将结构数组别名为结构成员数组?
- 当另一个数组是内存集时,内存集是否会更改数组长度?
- 任意大小的 constexpr 数组是否可以用作 switch 语句中的案例?