【问题标题】:How to check if there is no value in the array如何检查数组中是否没有值
【发布时间】:2019-11-17 02:26:49
【问题描述】:

我正在尝试为 int arr[] 中的 3 位数字创建一个随机发生器并检查它的值。要检查的值是数组是否有双精度,例如。 (5,5,3)然后它将得到不重复的前(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); 
}

附言另外,无论如何我可以为此编写更有效的代码吗?我只是为此借用了别人的代码...

【问题讨论】:

  • 请添加语言标签。

标签: c++ arrays function


【解决方案1】:

对于您的特定用例,嵌套循环将每个元素与每个其他元素匹配并检查重复项并没有错。在具有更多数字的示例中,可以通过多种方式确定这取决于您的约束。最简单的方法是创建一个std::unordered_set&lt;int&gt; 并遍历数组,检查当前数字是否在 unordered_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 的返回值将包含所有重复数字的向量

【讨论】:

    猜你喜欢
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2021-12-26
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多