剑指offer——旋转数组的最小数字
来源:互联网 发布:在app里找淘宝官方客服 编辑:程序博客网 时间:2024/05/01 13:51
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
建议读者自己思考以后再看答案
废话不多说,看代码:
public class MinNumberInRotateArray { public static int minNumberInRotateArray(int [] arr) { int low = 0; int high = arr.length-1; int mid = low; if(arr==null||arr.length == 0){ return -1; } //用到了快排的思想 while(low<=high){ mid = (low+high)/2; if (arr[low]==arr[high]&&arr[mid] == arr[high]){ //针对{1,0,1,1,1}这种情况要遍历 return traverseArray(arr); } if (arr[low]<arr[high]) { //针对{1,2,2,2,2}这种完全翻转的情况要遍历 return traverseArray(arr); } if(high-low==1){ mid = high; return arr[mid]; } if(arr[mid]>=arr[low]){ //mid仍在左数组 low = mid; }else{ high = mid; } } return arr[0]; } /** * 遍历数组(在特殊情况下要用到) * @param arr * @return */ public static int traverseArray(int[] arr){ int min = arr[0]; for(int i =0;i<arr.length;i++){ if(min>arr[i]){ min = arr[i]; } } return min; } public static void main(String[] args){ int[] arr = {1,0,1,1,1}; System.out.println(minNumberInRotateArray(arr)); }}
0 0
- 剑指offer——旋转数组的最小数字
- 《剑指offer》——旋转数组的最小数字
- 剑指offer——旋转数组的最小数字
- 旋转数组的最小数字——剑指offer
- 剑指offer——旋转数组的最小数字
- 剑指offer——)旋转数组的最小数字
- 剑指offer——旋转数组的最小数字______
- 剑指offer——旋转数组的最小数字
- 剑指offer——6.旋转数组的最小数字
- 剑指offer——旋转数组的最小数字
- 剑指offer—旋转数组的最小数字
- 《剑指offer》—6、旋转数组的最小数字
- 剑指offer(6)—旋转数组的最小数字
- 剑指offer—旋转数组的最小数字
- 剑指offer—旋转数组的最小数字
- 【剑指offer】旋转数组的最小数字
- 剑指offer--旋转数组的最小数字
- 剑指offer--旋转数组的最小数字
- 黑马程序员--iOS--Objective-C基础 (Foundation框架 二)
- 108. Convert Sorted Array to Binary Search Tree
- 【华为oj】蛇形矩阵
- JQuery之选择器
- style.height、offsetHeight、clientHeight、scrollHeight的区别
- 剑指offer——旋转数组的最小数字
- 计蒜客 难题题库 005 矩阵翻转
- Java图形化界面
- cJSON学习笔记2
- 2015.8.9--张佳莉
- vs2010 问题 >LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- C++ List 容器
- 计蒜客 难题题库 006 泥塑课
- uva 10382