本文主要是介绍剑指offer__03__旋转数组的最小数字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
心得
小小题目大变化,边界测试少不得,处处留心得永生
代码
/**
特殊情况:0111111旋转为1101111这个时候下面的算法就不能使用,就需要使用顺序查找法
*/
import java.util.ArrayList;
public class Solution {public int minNumberInRotateArray(int [] array) {if (array.length == 0)return 0;int start = 0, end = array.length - 1;int middle = start; // 这个用来处理不旋转的数组while (array[start] >= array[end]) {if (end == start + 1) {middle = end;break;}middle = (start + end) / 2;//这个用来处理上面提到的特殊案例if (array[start] == array[end] && array[end] == array[middle])return minInOrder(array, start, end);if (array[start] <= array[middle]) {start = middle;}else if (array[middle] <= array[end]) {end = middle;}}return array[middle];}public int minInOrder (int[] array, int start, int end) {int result = array[start];for (int i = start; i <= end; i++) {if (result > array[i])result = array[i];}return result;}
}
这篇关于剑指offer__03__旋转数组的最小数字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!