题目
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., [0,1,2,4,5,6,7]
might become [4,5,6,7,0,1,2]
).
Find the minimum element.
You may assume no duplicate exists in the array.
Example 1:
1 | Input: [3,4,5,1,2] |
Example 2:
1 | Input: [4,5,6,7,0,1,2] |
解法
解法一:库函数
排序,取第一个即可。
JAVA
1 | public int findMin(int[] nums) { |
解法二:遍历
循环遍历,取最小的一个即可。
JAVA
1 | public int findMin(int[] nums) { |
解法三:二分查找
JAVA
1 | public int findMin(int[] nums) { |
解法四:二分查找-递归
JAVA
1 | public int findMin(int[] nums) { |
解法五:二分查找变形
通过二分查找的方法,找到这个数列的最大值。
因为这个数列是一个排序数列变形而来,那么紧跟在最大数字之后的数字,一定是最小的数字。
因此,求出最大数字的索引,加1返回即可。
注意一下,如果最大数字索引是数组长度-1的话,返回第一个元素的索引即可。
JAVA
1 | public int findMin(int[] nums) { |
解法六:分治法
Java
1 | public int findMin(int[] nums) { |