【剑指offer】旋转数组的最小数字
旋转数组的最小数字
http://www.nowcoder.com/questionTerminal/9f3231a991af4f55b95579b44b7a01ba
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
1、思路分析
注意到旋转数组的特征,最小元素一定出现在两个递增数组的分界处,且前面一个递增数组的所有元素一定大于等于第二个第二个递增数组的所有元素,因此不用再暴力地遍历整个数组,降低一定的复杂度。我一开始没有考虑到旋转数组的特殊情况(即为原数组本身),但也提交成功了,从思路的完整性来说还是要补充上。
2、代码
import java.util.ArrayList; public class Solution { public int minNumberInRotateArray(int [] array) { if(array.length == 0){ return 0; } if(array.length == 1){ return array[0]; } for(int i = 0; i < array.length - 1; i++){ if (array[i] > array[i+1]) { return array[i+1]; } else { if (i == array.length - 2) { return array[0]; // 考虑到了旋转数组的特殊情况 } } } return 0; // 不能省略,否则编译器会认为没有返回语句 } }
3、复杂度
时间复杂度
空间复杂度O(1)