gpt4 book ai didi

c++ - 查找数组的最小子序列

转载 作者:太空狗 更新时间:2023-10-29 23:49:31 27 4
gpt4 key购买 nike

我有一个数组,例如{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

这是一些伪代码,概述了解决此问题的可能方法。如果找不到有效范围作为起点,则结果为零。

伪代码(快速,感谢 Kenny Ostrom )

  • curr = 0
  • lookup = std::unordered_set<int>
  • 将所有元素插入 lookup
  • 0 开始至 n其中 n是元素数组的大小
    • [循环]
      • 如果curr + 1不在 lookup 中跳出循环
      • 否则设置currcurr + 1
    • [循环结束]
  • 最后返回curr + 1

伪代码(有点快,取决于你的排序算法)

  • 对数组进行排序( std::sort 总是一个不错的选择)
  • 设置一些变量 curr0
  • 从 a0 到 an,其中 ai 是数组中索引为 i
    • [循环]
      • 如果curr + 1不等于 ai 则跳出循环
      • 否则设置curri
    • [循环结束]
  • 最后返回curr + 1

伪代码(慢)

  • 设置一些变量 curr0
  • 从 a0 到 an,其中 ai 是索引 i 处的数组元素

    • [循环]
      • 从 aj 到 an,其中 j = 0
        • [循环]
          • 如果curr + 1等于 aj 然后设置 curr到 aj 并跳出这个循环
        • [循环结束]
        • 如果curr没有改变,则跳出这个循环
    • [循环结束]
  • 最后返回curr + 1

关于c++ - 查找数组的最小子序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40474324/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com