无限运行时间
Infinite run time
对于 Ubuntu 16.04 中的以下代码
对于自定义测试用例
4 3
1 2 3 7
我的运行时是无限的,没有输出。(无输出意味着"a"也不会打印在控制台上(。但是当我评论函数调用 foo
// int temp = foo(ab, 0, n-1);
我得到输出
A##
无限运行时间和没有输出的原因是什么?
#include<bits/stdc++.h>
using namespace std;
int a[1000000];
int foo(int x, int f, int l)
{
int m = (f+l)/2;
while(f<=l)
{
if(a[m]==x)
return 1;
else if(a[m]<x)
f = m+1;
else if(a[m]>x)
l = m-1;
}
return 0;
}
int main()
{
int n, x;
cin >> n;
cin >> x;
int i=0;
for (i = 0; i < n; i++)
{
cin >> a[i];
}
cout<<'a';
sort(a,a+n);
for(i=0; i<n-1; i++)
{
if(a[i]==a[i+1])
{
cout << 0;
return 0;
}
}
cout<<'#';
int ab = a[i];
int temp = foo(ab, 0, n-1);
cout<<'#';
return 0;
}
你没有得到任何输出(甚至没有'a'
(的原因是stdout
被缓冲了。通常它是行缓冲的,这意味着只有在写入新行时才会打印它。
您可以通过执行std::cout << std::flush;
来强制缓冲区中的任何内容立即打印出来,或者例如在您的情况下,std::cout << 'a' << std::flush;
会起作用。
无限循环的原因是您的f
值和l
值最多更新一次。 最初m
指向数组的中间(即(n-1)/2
(,从那一刻起,
如果元素a[m]
小于x
,则无限分配m+1
即(n-1)/2 + 1
f
-如果元素a[m]
大于x
,则无限(n-1)/2 - 1
分配给l
在任何一种情况下,f
永远不会大于l
并且l
永远不会小于f
(除非数组具有单个元素或具有两个元素并且x<a[0]
(
尝试按以下方式更新函数:
int foo(int x, int f, int l)
{
int m = (f+l)/2;
while(f<=l)
{
if(a[m]==x)
return 1;
else if(a[m]<x)
{
f = m+1; m = f;
}
else if(a[m]>x)
{
l = m-1; m = l;
}
}
return 0;
}
相关文章:
- KMP算法和LPS表构造的运行时间
- 如何计算Big-O表示法中的平均渐近运行时间
- 用时钟测量程序的运行时间
- 如何减少代码的运行时间以对齐文本?
- 我的 c++ 应用程序中的运行时间从 0 增加到 60 太快了(例如一毫秒或一微秒)
- 使用 Qt 测量过程的实际运行时间
- 如何执行用 C++ 编写的程序的运行时间?
- 无限运行时间
- 如何优化C++键值程序以获得更快的运行时间
- 这个算法的运行时间复杂度是多少?你是如何分析的
- 两个嵌套循环的运行时间复杂性:二次型还是线性
- 重复值的最长运行时间
- 同一程序的运行时间差异很大,有时达到1000+us
- 测量 OpenCL 应用程序的运行时间
- 为什么以相同的数量插入到集合中,基于不同的方法具有不同的运行时间?
- variadic函数模板:基于n编译时值在运行时间自动n输入
- 如何修复数据库连接的C 程序运行时间错误(0xc0000005)
- C 获得运行时间和内存使用量
- C DO插座关闭自己的运行时间
- 此代码中运行时间错误的原因是什么