在有序旋转数组中找到最小值
来源:互联网 发布:python 自动化开发 编辑:程序博客网 时间:2024/05/01 13:49
【题目】
有序数组arr可能经过一次旋转处理,也可能没有,且arr可能存在重复的数。例如,有序数组[1,2,3,4,5,6,7],可以旋转为[4,5,6,7,1,2,3]。
给定一个可能旋转过的有序数组arr,返回arr中最小值。
【代码】
public static void main(String[] args) { System.out.println(getMin(new int[]{4,5,6,7,1,2,3}));//1 System.out.println(getMin1(new int[]{5,5,5,5,6,4,5}));//4 } //在有序旋转数组中找到最小值 public static int getMin(int[] arr){ //挨个比较查找 if(arr==null||arr.length==0){ return -1; } int res=Integer.MAX_VALUE; for(int i=0;i<arr.length-1;i++){ int temp=arr[i]<arr[i+1]?arr[i]:arr[i+1]; res=Math.min(res, temp); } return res; } public static int getMin1(int[] arr){ //二分查找 if(arr==null||arr.length==0){ return -1; } int low=0; int high=arr.length-1; int mid=0; while(low<high){ if(low==high-1){ break; } if(arr[low]<arr[high]){//[1 2 3 4 5],1<5 没旋转 return arr[low]; } mid=(low+high)/2; if(arr[low]>arr[mid]){//[5 1 2 3 4],5>2 high=mid; continue; } if(arr[mid]>arr[high]){//[3 4 5 1 2],5>2 low=mid; continue; } //到了这一步,说明arr[low]=arr[mid]=arr[high] while(low<mid){ if(arr[low]==arr[mid]){ low++;//从low到Mid,值全部一样, } else if(arr[low]<arr[mid]){//5 5 5 4 5,突然发现arr[i]<arr[low],i就是断点处 return arr[low]; } else{//遍历到i位置,突然发现arr[i]>arr[mid],则断点在i...mid上,5 5 5 5 6 4 5 high=mid;//???? break; } } } return Math.min(arr[low], arr[high]); }
【说明】
二分查找法还要好好消化啊….
阅读全文
0 0
- 在有序旋转数组中找到最小值
- 在有序旋转数组中找到最小值
- 其他题目---在有序旋转数组中找到最小值
- 其他题目---在有序旋转数组中找到一个数
- 在有序旋转数组中找到一个数
- 旋转有序数组中找最小值
- 求旋转有序数组的最小值和在旋转数组中查找
- 有序数组旋转后数组最小值
- 有序数组的旋转数组的最小值
- 在两个有序数组中找到中位数
- 有序数组或者有序数组的旋转数组 查找最小值
- 寻找旋转有序数组的最小值
- 查找有序旋转数组中的最小值
- 求出有序数组旋转后的最小值
- 旋转数组中寻找最小值
- Array----- 153. Find Minimum in Rotated Sorted Array(查找旋转后的有序数组中最小值)
- 循环有序数组(旋转数组)的最小值
- 在一个有序的旋转数组中,查找给定值
- LoadRunner监控到的Linux服务器CPU的一些主要指标说明
- 【头条】大数据时代的新变量
- Java获取汉字拼音或拼音首字母
- Cannot open service 'VisualSVNServer': 指定的服务未安装。
- JS——搜索框
- 在有序旋转数组中找到最小值
- Python学习笔记之报错整理
- 傅盛:生物学思维给我的四个启示
- java正则
- Lua math函数的用法
- Ubuntu下学习git第二天--仓库操作
- 如果表存在则删除
- GDB: Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.47.el6.x86_64
- js或jquery实现页面打印可局部打印