【追求进步】旋转数组的最小数字
2016-03-17 13:01
351 查看
【加油加油,每天进步三个算法!希望自己能坚持下去····】
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。在线代码:
import java.util.ArrayList; public class Solution { public int minNumberInRotateArray(int [] array) { //理清楚思路,二分查找方法 //边界处理 // 判断输入是否合法 if (array == null || array.length == 0) { return 0; } //初始化 int index1=0; int index2=array.length-1; int indexMid=index1; /* 此时两个指针的距离是1,边个名 */ while(array[index1]>=array[index2]){ if(index2-index1==1){ return array[index2]; } //取中间的数 indexMid=(index1+index2)/2; //【特别提醒】考虑如果三个数都相等,则需要进行顺序处理,从头到尾找最小值 if(array[indexMid]==array[index1]&&array[index2]==array[indexMid]){ return Midorder(array,index1,index2); } // 如果中间位置对应的值在前一个排好序的部分,将lo设置为新的处理位置 if(array[indexMid]>=array[index1]){ //说明中间的元素是前半递增序列 index1=indexMid;//移动指针1的到中间位置 } // 如果中间位置对应的值在后一个排好序的部分,将hi设置为新的处理位置 else if(array[indexMid]<=array[index2]){ index2=indexMid;//移动指针2到中间位置 } } return array[indexMid]; } public static int Midorder(int [] array,int start,int end){ int result=array[start]; for(int i=start+1;i<=end;i++){ if(result>array[i]){ result=array[i]; } } return result; } }
相关文章推荐
- ZooKeeper 安装,启动,验证
- ffmpeg ios代码加字幕相关
- 控制台五子棋
- 互斥锁--pthread_mutex_t
- Top N的MapReduce程序MapReduce for Top N items
- MapReduce模式MapReduce patterns
- Jboss 中Log4冲突解决方法
- 排序算法之冒泡排序
- 《Linux内核设计与实现》第一章、第二章读书笔记
- 推荐系统冷启动
- 服务端Servlet实现文件上传的示例代码
- 为Hadoop创建JAR包文件Creating a JAR for Hadoop
- RNN-RBM 网络架构及程序解读
- DD-WRT中的各种无线模式
- JQuery实现Ajax
- 二叉排序树的删除(终极版)
- Java 二进制I/O流之字节流
- apicloud db模块的简单操作
- MapReduce任务分析与讨论MapReduce job explained
- InnoDB相关