【发布时间】: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 可能比任何数量的动态分配都便宜,而且更干净。 -
但是这些网站上的问题不是在“现实世界”中所期望的。并且展示的代码确实很糟糕。您没有学习正确的数据结构或算法,您没有学习正确使用该语言可用的标准功能。你甚至没有学习正确的语法。而且你不会学习团队合作、调试或维护这样重要的部分,甚至不会学习你编写的代码背后的数学知识。不幸的是,永远需要没有任何职业道路前进机会的代码猴子。 :(