标签:
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
public class Solution06 {
public int minNumberInRotateArray(int [] array) {
if (array.length == 0) {
return -1;
}
int index1 = 0;
int index2 = array.length -1;
int mid = index1;
while (array[index1] >= array[index2]) {
if ((index2 - index1) == 1) {
mid = index2;
break;
}
mid = (index2 + index1) / 2;
if (array[mid] >= array[index1]) {
index1 = mid;
} else if (array[mid] <= array[index2]) {
index2 = mid;
}
}
return array[mid];
}
}
考虑数组中出现多个相等的元素
package com.sword;
import java.util.ArrayList;
public class Solution06 {
public int minNumberInRotateArray(int [] array) {
if (array.length == 0) {
return -1;
}
int index1 = 0;
int index2 = array.length -1;
int mid = index1;
while (array[index1] >= array[index2]) {
if ((index2 - index1) == 1) {
mid = index2;
break;
}
mid = (index2 + index1) / 2;
if (array[index1] == array[mid] && array[index2] == array[mid]) {
return minOrder(array, index1, index2);
}
if (array[mid] >= array[index1]) {
index1 = mid;
} else if (array[mid] <= array[index2]) {
index2 = mid;
}
}
return array[mid];
}
public int minOrder(int[] data, int start, int end) {
int result = data[start];
for (int i = start + 1; i <= end; i++) {
if (result > data[i]) {
result = data[i];
}
}
return result;
}
}
标签:
原文地址:http://www.cnblogs.com/rosending/p/5610556.html