假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
请找出其中最小的元素。
注意数组中可能存在重复的元素。
示例 1:
1 | 输入: [1,3,5] |
示例 2:
1 | 输入: [2,2,2,0,1] |
方法一:暴力查找
思路:从前往后遍历一次数组,查找数组中的最小元素。
1 | class Solution { |
时间复杂度为O(n),空间复杂度为O(1)。
方法二:
思路:旋转后的数组以最小元素为界,被分割为两个有序(递增)区域。
除了最小元素和它的前一个元素外,数组中相邻的两个结点x和y,满足x <= y。
1 | class Solution { |
时间复杂度为O(n),空间复杂度为O(1)。
方法三:二分查找
1 | class Solution { |
时间复杂度为O(log n),空间复杂度为O(1)。