题目:
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
分析:
这道题和LeetCode上153,154是一样的。只不过153的数组元素是不重复的,154则允许数组有重复元素。
这里直接要求输入的是非递减排序的数组,所以和154题是一样的。
LeetCode 153. Find Minimum in Rotated Sorted Array寻找旋转排序数组中的最小值 (C++)
LeetCode 154. Find Minimum in Rotated Sorted Array II寻找旋转排序数组中的最小值 II (C++)
需要看分析的可以移步到153,154中查看题目的分析。
程序:
C++
class Solution { public: int minNumberInRotateArray(vector<int> rotateArray) { if(rotateArray.empty()) return 0; return find(rotateArray, 0, rotateArray.size()-1); } int find(vector<int> &nums, int l, int r){ if(nums[l] < nums[r] || l == r) return nums[l]; int mid = l + (r - l) / 2; return min(find(nums, l, mid), find(nums, mid+1, r)); } };
Java
import java.util.ArrayList; import java.util.*; public class Solution { public int minNumberInRotateArray(int [] array) { if(array.length == 0) return 0; return find(array, 0, array.length-1); } public int find(int[] array, int l, int r){ if(array[l] < array[r] || l == r) return array[l]; int mid = l + (r - l) / 2; return Math.min(find(array, l, mid), find(array, mid+1, r)); } }