作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个数组,例如{1,2,4,5,6}。我希望我的函数找到最大可能的数字 X,以便 1,2,...,X-1 中的所有数字都在数组中。在这种情况下,X=3。数组中的数字可以是从 0 到无穷大。
我的尝试是:
int array(int* t, int r) {
int* a;
int m=0;
int i;
for(i=0;i<=r;i++){
a[i]=i;
if(a[i]==t[i])
m++;
}
return m;
}
我想创建一个从 1 到 r 的数组,这是一个数组的长度,充满自然数,即 {1,2,3...} 。然后我想将它与实际数组 t 进行比较。如果有匹配项,请寻找另一个匹配项。
我不知道为什么它不起作用以及如何解决它?
无论如何,代码不起作用,我仍然不知道如何解决这个问题。
仍在寻找答案。
更新:我做了类似的事情:
int array(int* t, int r) {
for(int x=0;x<r;x++){
for(int y=0; y<r-1;y++){
if(t[y]>t[y+1]){
int temp=t[y+1];
t[y+1]=t[y];
t[y]=temp;
}
}
}
for (int i = 0; i != r; i++) {
if (t[i] != (i + 1)) {
return i + 1;
}
}
return r + 1;
}
然而,当在输入数组中时,我在某些地方有零,例如{5,0,1,2} 函数始终返回 1,无论零放在何处。这是为什么?
最佳答案
你的代码有很多问题
int array(int* t, int r) {
int* a;
int m=0;
int i;
for(i=0;i<=r;i++){
a[i]=i;
if(a[i]==t[i])
m++;
}
return m;
}
a
未初始化,即它不指向您的程序分配的有效内存。你需要做 int *a = new int[r]
. 别忘了做delete a
在你的函数返回之前i
应该上升到 r - 1
不是r
.所以i < r
而不是 i <= r
这是一些伪代码,概述了解决此问题的可能方法。如果找不到有效范围作为起点,则结果为零。
curr
= 0lookup
= std::unordered_set<int>
lookup
0
开始至 n
其中 n
是元素数组的大小
curr + 1
不在 lookup
中跳出循环curr
至 curr + 1
curr + 1
std::sort
总是一个不错的选择)curr
至 0
curr + 1
不等于 ai 则跳出循环curr
给icurr + 1
curr
至 0
从 a0 到 an,其中 ai 是索引 i 处的数组元素
j
= 0
curr + 1
等于 aj 然后设置 curr
到 aj 并跳出这个循环curr
没有改变,则跳出这个循环最后返回curr + 1
关于c++ - 查找数组的最小子序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40474324/
这是我第一次使用 Codeigniter,需要一些帮助。我需要按照 CI 3 教程和 Web 资源使用 JOINS 和 WHERE 语句进行 Db 查找,但是遇到了困难,我不能 100% 确定我在哪里
我是一名优秀的程序员,十分优秀!