寻找旋转排序数组中的最小值
2015-11-24 19:58
148 查看
题目描述一
假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。你需要找到其中最小的元素。
你可以假设数组中不存在重复的元素。
题目解答一
解题思路
数组中不存在重复的元素二分法的思想,首先判断最左边和最右边的关系,如果小于就直接返回
如果中间的值大于等于最左边的值,从最左到中间是递增的,所以left = middle + 1
如果中间的值小于最左边的值,right = middle
代码实现
public class Solution { /** * @param num: a rotated sorted array * @return: the minimum number in the array */ public int findMin(int[] num) { // write your code here if(num == null || num.length == 0) return -1; //target 最左边的值 //从最右到最左 有两种情况 递增或者递减 int left = 0; int right = num.length - 1; while(left < right){ if(num[left] < num[right]) return num[left]; int middle = (left + right) / 2; if(num[middle] >= num[left]){ //从左到右递增 left = middle + 1; }else { // 从右到最左递增 right = middle; } } return num[left]; } }
题目描述二
假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 4 5 6 7 可能变成是4 4 5 6 7 0 1 2)。你需要找到其中最小的元素。
数组中可能存在重复的元素。
题目解答二
解题思路
数组中可能会存在重复的元素代码实现
代码同上public class Solution { /** * @param num: a rotated sorted array * @return: the minimum number in the array */ public int findMin(int[] num) { // write your code here if(num == null || num.length == 0) return -1; int left = 0; int right = num.length - 1; while(left < right){ if(num[left] < num[right]) return num[left]; int middle = (left + right)/2; // 1 0 1 1 1 和 1 1 1 0 1 的情况 if(num[middle] == num[left] && num[middle] == num[right]) return inOrder(num, left, right); if(num[middle] >= num[left]){ left = middle+1; }else { right = middle; } } return num[left]; } public int inOrder(int[] num, int left, int right){ int min = num[left]; for(int i = left+1; i <= right; i++){ if(num[i] < min) min = num[i]; } return min; } }
相关文章推荐
- lightoj1048 Conquering Keokradong
- Mysql学习笔记四,字符集
- gdb执行和调试窗口分离
- 怀才不遇
- 主题制作
- 开启Activity获取不到返回结果的常见问题
- Python计算机视觉编程练习8:string 模块学习
- JavaMail1.5.4 源码
- 眼手组合-眼低手低者
- AngularJs $location 和 $window
- 不用加减乘除实现加法
- java HashCode()方法理解
- MongoDB、redis、memcached
- iOS开发多线程-线程的状态
- zoj3119 DP
- Delphi 常用API 函数(好多都没见过)
- 与 Web 服务器通信 - web sockets
- 眼手组合-眼低手高者
- ajax+json+servlet实现表格的基本功能
- 设计模式 - 行为型模式 - 访问者模式