有人可以解释如何找到此算法的时间复杂度 我认为它的O(logN)是因为二进制分裂,但我不确定
int findRotationCount(int a[], int sizeOfArray) //O(logN)
{
int start = 0;
int endValue = sizeOfArray -1;
while(start<endValue)
{
if(a[start] < a[endValue])
return endValue+1;
else
{
int mid = (start+endValue)/2;
if(a[start]<=a[mid] && a[mid+1]<=a[endValue])
return mid+1;
else if(a[start]<=a[mid])
start = mid+1;
else
endValue = mid;
}
}
return -1;
}
谢谢!
答案 0 :(得分:0)
你是对的,while
的每个循环都会将范围start
缩小到endValue
到(大约)一半的大小,因此它是O(log n)
。寻找例如分析二进制搜索,如果您需要更多详细信息,它具有类似的结构。