
解法:二分法
查看官方题解
要画图理解各种情况,接下来照搬三张官方图:




在第三种情况下,不确定最小元素在mid的左侧还是右侧。只能通过减小right来逐步缩小区间。
int minArray(int* numbers, int numbersSize){
int left = 0, right = numbersSize - 1;
while(left < right)
{
int mid = left + (right - left)/2;
if(numbers[mid] < numbers[right]) right = mid;
else if(numbers[mid] > numbers[right]) left = mid + 1;
else right--;
}
return numbers[left];
}
时间复杂度 O ( l o g n ) O(logn) O(logn),空间复杂度 O ( 1 ) O(1) O(1)。
本文介绍了使用二分法寻找数组中最小元素的具体实现,包括时间复杂度为O(logn)的算法步骤,并配以官方示例图帮助理解。重点讲解了如何处理不确定元素位置的情况,以及空间复杂度的分析。
393

被折叠的 条评论
为什么被折叠?



