纯正从时间复杂度来看,这两种写法为什么一个超时
单纯从时间复杂度来看,这两种写法为什么一个超时,
在OJ在做一道题,大体思想都解决了,可就是超时,后来看了别人的代码,发现里面有一段造成了超时,对算法时间复杂度还不是很了解,求各位看下,下面两种写法,单纯从时间复杂度来看为什么相差那么大,
case1:
csse2:
两个情况的r 大小是一样的
------解决方案--------------------
fabs函数调用产生的开销导致的?
------解决方案--------------------
因为case1比case2多了一句 if(fabs(points[i].x-points[mid].x)<=dis){
明显2比1时间复杂度低。
在OJ在做一道题,大体思想都解决了,可就是超时,后来看了别人的代码,发现里面有一段造成了超时,对算法时间复杂度还不是很了解,求各位看下,下面两种写法,单纯从时间复杂度来看为什么相差那么大,
case1:
for(int i=l;i<=r;++i){
if(fabs(points[i].x-points[mid].x)<=dis){
if(points[i].x<=points[mid].x){
pointx[m]=points[i];
pointx[m].index='l';
++m;
}else{
pointx[m]=points[i];
pointx[m].index='r';
++m;
}
}
}
csse2:
for ( i = l; i <= mid; i++)
{
double leftCoord = points[mid].x - dis;
if (points[i].x >= leftCoord)
{
pointx[m].index = 'l'; /*标识属于左边部分*/
pointx[m].x = points[i].x;
pointx[m].y = points[i].y;
m++;
}
}
for ( ; i <= r; i++)
{
double rightCoord = points[mid].x + dis;
if (points[i].x <= rightCoord)
{
pointx[m].index = 'r'; /*标识属于右边部分*/
pointx[m].x = points[i].x;
pointx[m].y = points[i].y;
m++;
}
}
两个情况的r 大小是一样的
------解决方案--------------------
fabs函数调用产生的开销导致的?
------解决方案--------------------
因为case1比case2多了一句 if(fabs(points[i].x-points[mid].x)<=dis){
明显2比1时间复杂度低。