C++ 程序中的错误计数向量中的 1 个
bug in c++ program count no of 1's in vector
在一次网上面试中有人问了我一个问题。他们提供了一段代码,我们必须找出代码中可能存在的错误。代码如下所示:
- 函数提供了一个非空的0索引的整数向量(只包含1和0)。
- 函数将返回最长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。 - 如果没有1,则返回
-1
。 - 输入向量可以被改变,所以我们不能将向量的签名更改为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)
相关文章:
- C++中函数的向量返回类型引发错误
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 对象指针 c++ 的全局向量错误
- C++:自定义数据类型向量错误的队列
- getCompatibleComponent返回向量错误
- FlatBuffers:未支撑的工会向量错误将JSON文件转换为二进制文件
- 尝试调用 at() 时 c++ 中的向量错误
- 结果向量错误
- 尝试用函数填充线程向量 - 错误
- C++ 布尔向量错误:赋值时"iterator not dereferencable"
- CUDA 推力:类的:d向量 |错误
- C++多结构向量错误
- c++正则化向量;错误:无法绑定
- c++向量错误
- 向量错误抛掷分配经验甚至不访问任何元素
- std::函数的向量错误
- STL向量错误:未知类型名称
- 向量错误分配错误 C++