C++ 程序中的错误计数向量中的 1 个

bug in c++ program count no of 1's in vector

本文关键字:向量 错误 程序 C++      更新时间:2023-10-16

在一次网上面试中有人问了我一个问题。他们提供了一段代码,我们必须找出代码中可能存在的错误。代码如下所示:

  1. 函数提供了一个非空的0索引的整数向量(只包含1和0)。
  2. 函数将返回最长1序列的起始位置。例如,如果输入值{0,0,0,1,1,1,1,1,0,0,1,1,1,0,1,1},它将返回3,因为1的最长序列是从位置3到7总共5个连续的1。如果输入值是{0,0,1},那么它将返回2,因为只有一个1,并且1的最长序列的长度是1。
  3. 如果没有1,则返回-1
  4. 输入向量可以被改变,所以我们不能将向量的签名更改为const。

我用变量no输入测试了这个函数,我发现它工作得很好。我无法找出代码中的任何错误。但是指令说代码中有一个bug,我们最多可以修改2行代码来解决这个bug。

int solution(vector<int>& A) {
    int n = A.size();
    int i = n - 1;
    int result = -1;
    int k = 0;
    int maximal = 0;
    while (i > 0) {
        if (A[i] == 1) {
            k = k + 1;
            if (k >= maximal) {
                maximal = k;
                result = i;
            }
        } else {
            k = 0;
        }
        i = i - 1;
    }
    if (A[i] == 1 && k + 1 > maximal)
        result = 0;
    return result;
}

要修复UB为空的情况下,我添加检查!A.empty()
然后我将i替换为0(此时i == 0)
并将检查替换为最大值,以获得tie:

的一致结果。
if (!A.empty() && A[0] == 1 && k + 1 >= maximal)

我可能会改变另一行,我将修复原型,因为A没有修改。

int solution(const std::vector<int>& A) {

问题说明是

1。Vector是不可变的2.输入向量不为空

我在Java中尝试过同样的问题,但不同的方法来看看缺少什么,因为我在上面的代码中找不到任何错误。

包javaapplication7;

/* *** @作者Owner*/JavaApplication7 {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic here
    int[] A={0,1,0,1,1,1,1};
    System.out.println(solution(A));
}
static int solution(int A[]){
    int i=0,count=0,max=0,pos=-1;
while(i<=A.length-1)
{
 if(A[i]==1)
 {
     count++;
     i=i+1;
 }  
    else
 {
     i=i+1;
     count=0;
 }
 if(count>max)
 {
     pos=i-count;
     max=count;
 }
}
if(count==0)
return pos;
else 
    return pos; 
}

}

如果两个序列长度相等,则给出的代码将倾向于更靠近左侧的序列。对于索引0

的检查就不会发生这种情况
if (A[i] == 1 && k + 1 > maximal)
应该

if (A[i] == 1 && k + 1 >= maximal)