剑指offer -- 旋转数组最小值
2017-07-15 21:40
357 查看
问题描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1.
public class RotateMin {
public static void main(String[] args) throws Exception {
//int[] arr = {3,4,5,1,2};
int[] arr = {1,1,1,0,1};
int minVal = minInRotate(arr);
System.out.println(minVal);
}
private static int minInRotate(int[] arr) throws Exception {
if(arr == null || arr.length <=0){
throw new Exception("无效参数");
}
int start = 0;
int end = arr.length-1;
int middle = start;
if(arr[start]>=arr[end]){
while(start<end){
if(start==end-1){
middle = end;
break;
}
middle = (start+end)/2;
if(arr[start]==arr[end] && arr[start]==arr[middle]){
return minInOrder(arr,start,end);
}
if(arr[middle]>=arr[start]){
start = middle;
}else if(arr[middle]<=arr[end]){
end = middle;
}
}
}
return arr[middle];
}
private static int minInOrder(int[] arr, int start, int end) {
int result = arr[start];
for(int i=1;i<arr.length;i++){
if(result>arr[i]){
result = arr[i];
}
}
return result;
}
}
public class RotateMin {
public static void main(String[] args) throws Exception {
//int[] arr = {3,4,5,1,2};
int[] arr = {1,1,1,0,1};
int minVal = minInRotate(arr);
System.out.println(minVal);
}
private static int minInRotate(int[] arr) throws Exception {
if(arr == null || arr.length <=0){
throw new Exception("无效参数");
}
int start = 0;
int end = arr.length-1;
int middle = start;
if(arr[start]>=arr[end]){
while(start<end){
if(start==end-1){
middle = end;
break;
}
middle = (start+end)/2;
if(arr[start]==arr[end] && arr[start]==arr[middle]){
return minInOrder(arr,start,end);
}
if(arr[middle]>=arr[start]){
start = middle;
}else if(arr[middle]<=arr[end]){
end = middle;
}
}
}
return arr[middle];
}
private static int minInOrder(int[] arr, int start, int end) {
int result = arr[start];
for(int i=1;i<arr.length;i++){
if(result>arr[i]){
result = arr[i];
}
}
return result;
}
}
相关文章推荐
- 剑指offer——旋转数组的最小数字(二分法思路)
- 剑指offer---旋转数组的最小数字
- 【剑指offer】旋转数组的最小值
- 剑指offer之旋转数组的最小数字
- 【剑指offer】【旋转数组的最小数字 】二分查找的变体
- 剑指offer—旋转数组的最小数字
- 剑指offer-面试题8:旋转数组中的最小数字
- 剑指offer--旋转数组中的最小数
- 剑指offer:旋转数组的最小数字
- 剑指Offer面试题8旋转数组的最小数字(二分查找)附带快排和按年龄排序
- 【练习笔记】剑指offer-面试题8 :旋转数组的最小数字
- 剑指offer-----旋转数组的最小数字(java版)
- 剑指offer---旋转数组的最小数字
- 剑指offer--旋转数组的最小数字
- 剑指offer面八_旋转数组的最小数字
- 剑指Offer:旋转数组的最小数字
- [剑指offer][面试题08]求旋转数组的最小数字
- 剑指offer之面试题8:旋转数组的最小数字
- 剑指offer——旋转数组的最小数字
- [牛客网,剑指offer,python] 旋转数组的最小数字