Leetcode153. 寻找旋转排序数组中的最小值
Leetcode153. 寻找旋转排序数组中的最小值
题目描述
已知一个长度为 n
的数组,预先按照升序排列,经由 1
到 n
次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7]
在变化后可能得到:
- 若旋转
4
次,则可以得到[4,5,6,7,0,1,2]
- 若旋转
7
次,则可以得到[0,1,2,4,5,6,7]
注意,数组 [a[0], a[1], a[2], ..., a[n-1]]
旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]]
。
给你一个元素值 互不相同 的数组 nums
,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的 最小元素 。
示例 1:
1 | 输入:nums = [3,4,5,1,2] |
示例 2:
1 | 输入:nums = [4,5,6,7,0,1,2] |
示例 3:
1 | 输入:nums = [11,13,15,17] |
提示:
n == nums.length
1 <= n <= 5000
-5000 <= nums[i] <= 5000
nums
中的所有整数 互不相同nums
原来是一个升序排序的数组,并进行了1
至n
次旋转
解题思路
这道题是旋转排序数组类型的题。这种类型的解题思路都是二分法。
首先设置一个mid
,表示中间位置的数。那么在这个数的两边,至少有一边是有序的。而且,如果在它的右边不是递增有序的,那么最小的数肯定就在右边区间;否则,在左边区间寻找。
具体细节可以参见示例代码。
示例代码
1 | int getMin(vector<int>& nums,int left,int right) |
时间复杂度为:
空间复杂度为:
如果使用迭代的方式实现二分法,那么空间复杂度就为
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 二进制的叮当喵!