找考题网-背景图
问答题

将一个数组最开始的若干个元素搬到数组的末尾,称之为数组的旋转。输入一个已排好序数组的一个旋转,求该旋转数组的最小元素。如,数组{3,4,5,1,2}为有序数组{1,2,3,4,5}的一个旋转数组,该数组的最小值为1。
(1)给出算法的基本设计思想。
(2)根据设计思想,采用C或C++语言描述算法,关键之处给出注释。
(3)说明你所设计算法的时间复杂度和空间复杂度。

【参考答案】

(1)算法的基本设计思想:
注意到旋转之后的数组实际上可以划分成两个排序的子数组,且前面的子数组的元素都大于或等于后面子数组的元素,而最小的元素刚好是这两个子数组的分界线。
我们试着用二元查找的思路寻找这个最小的元素:
定义两个指针,分别指向数组的第一个元素和最后一个元...

(↓↓↓ 点击‘点击查看答案’看完整答案 ↓↓↓)
热门试题