这段代码在执行时超时你能帮我检查这段代码哪里有问题吗?代码: int minArrayvectorint& numbers ifnumbersempty return 0; return getHeadnumbers0numberssize-1; int getHeadvectorint& numbersint bgnint end
这段代码在执行时可能会出现无限递归的情况,导致超时。具体原因是:在数组非升序序列的情况下,当中间值等于末尾值时,代码会将范围缩小到 bgn 到 end-1,这样可能会导致出现无限递归的情况,因为在这种情况下无法确定原头在前半还是后半。
解决方法是将缩小范围的判断条件改为 numbers[mid]==numbers[end],这样就可以避免出现无限递归的情况。修改后的代码如下:
int minArray(vector<int>& numbers) {
if(numbers.empty()) return 0;
return getHead(numbers,0,numbers.size()-1);
}
int getHead(vector<int>& numbers,int bgn,int end){
if(bgn==end) return numbers[bgn];
int mid=(bgn+end)/2;
if(numbers[bgn]>=numbers[end]) //数组非升序序列
{
if(numbers[mid]>numbers[end]) return getHead(numbers,mid,end); //中间值大于末尾值:原头在后半
else if(numbers[end]>numbers[mid]) return getHead(numbers,bgn,mid);//末尾大于中间:原头在前半
else return getHead(numbers, bgn, end-1);// 中间值等于末尾值:缩小范围
}
return numbers[bgn];
}
原文地址: https://www.cveoy.top/t/topic/belu 著作权归作者所有。请勿转载和采集!