[剑指offer]旋转数组的最小数字
Posted moonbeautiful
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[剑指offer]旋转数组的最小数字相关的知识,希望对你有一定的参考价值。
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组3,4,5,1,2为1,2,3,4,5的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组3,4,5,1,2为1,2,3,4,5的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
题目链接:
package com.sunshine.OFFER66_SECOND; import org.junit.Test; public class A6_minNumberInRotateArray @Test public void test() int[] arr = 3, 1, 2; System.out.println(minNumberInRotateArray(arr)); System.out.println(minNumberInRotateArray2(arr)); public int minNumberInRotateArray(int[] array) if (0 == array.length) return 0; int min = array[0]; for (int i = 1; i < array.length; i++) if (array[i] < min) min = array[i]; return min; //个人感觉描述的不是很清楚,非递减排序的数组为什么就是一个递增数组的一个旋转。。虽然样例如此。 //他人优解。 public int minNumberInRotateArray2(int[] array) if (0 == array.length) return 0; int left = 0; int right = array.length - 1; while (left < right) int mid = (left + right) / 2; if (array[mid] > array[right]) left = mid + 1; else if (array[mid] < array[right]) right = mid; else right--; return array[right];
以上是关于[剑指offer]旋转数组的最小数字的主要内容,如果未能解决你的问题,请参考以下文章