【问题标题】:Finding repeated / missing number in range 1 to n in cpp在 cpp 中查找 1 到 n 范围内的重复/缺失数字
【发布时间】:2021-09-17 18:25:13
【问题描述】:

我尝试通过散列解决并通过动态数组返回。
但在测试用例中遇到错误:

14  
12 7 5 1 13 1 10 8 11 9 2 4 3 6  

正确的输出是:

1 14  

我的代码输出是:

1 0

否则到目前为止所有输出都是正确的。这是我的代码:

int *findTwoElement(int *arr, int n) {

    int *res=new int(2);
    int hsh[n]={0};
    int mini;
    for(int i=1;i<=n;i++)
        {
            hsh[arr[i-1]]++;
        }
     for(int i=1;i<=n;i++)
     {
        if(hsh[i]>1)
              {
                  mini=min(mini,i);
                  res[0]=mini;
              }
        if(hsh[i]==0)
              {
                  res[1]=i;
              }
            
     }
   return res;
}

【问题讨论】:

  • 您的代码包含variable-length array,其中isn't a part of C++。请改用std::vector。并获取some good C++ books 并参加一些课程以正确学习 C++ 和编程。所谓的“竞赛”或在线评委网站不是学习或教学资源。
  • 作为提示:new int(2) 分配 一个 int 元素。一个大小为1 的数组,本质上。
  • "new int(2)" 不会创建大小为 2 的数组。它会创建值为 2 的 onw 整数。您需要“new int[2]”
  • 旁注:考虑使用 std::pair 并按值返回,而不是 2 元素动态数组。复制 2 个ints 可能比任何数量的动态分配都便宜,而且更干净。
  • 但是这些网站上的问题不是在“现实世界”中所期望的。并且展示的代码确实很糟糕。您没有学习正确的数据结构或算法,您没有学习正确使用该语言可用的标准功能。你甚至没有学习正确的语法。而且你不会学习团队合作、调试或维护这样重要的部分,甚至不会学习你编写的代码背后的数学知识。不幸的是,永远需要没有任何职业道路前进机会的代码猴子。 :(

标签: c++ arrays sorting hash


【解决方案1】:

谢谢大家!!其实原因很简单 new 会动态分配内存 否则普通数组将在堆栈中分配内存 一旦我们的函数超出范围,所有堆栈内存将被自动清除。 我们也可以为此使用 malloc。

1>long long int hsh[n+1]={0};

2> 第一次迭代应该来自:for(int i=0;i&lt;n;i++)

3> 第二次迭代将来自:for(int i=0;i&lt;=n;i++)

4> 问题被修改,所以现在我们只有 1 个重复元素,所以不需要最小,正确的代码应该是:res[0]=i

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 2022-01-15
    相关资源
    最近更新 更多