题目:寻找旋转排序数组中的最小值 II
来源:互联网 发布:.fun域名火了 编辑:程序博客网 时间:2024/05/23 01:57
假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。
你需要找到其中最小的元素。
数组中可能存在重复的元素。
你需要找到其中最小的元素。
数组中可能存在重复的元素。
您在真实的面试中是否遇到过这个题?
Yes
样例
给出[4,4,5,6,7,0,1,2] 返回 0
标签 Expand
样例
给出[4,4,5,6,7,0,1,2] 返回 0
标签 Expand
相关题目 Expand
http://blog.csdn.net/xiaoxiaoluo/article/details/40632243
解题思路:
有序的旋转数组前半部分和后半部分都是递增的序列。数组第一个元素要大于等于最后一个元素。否则数组本身就是个递增的序列,第一个元素就是最小数
如果不是递增序列,则取中间数。
1.如果中间数大于数组的第一个元素,说明最小数存在后半段,范围缩小到中间数到最后一个元素左开右闭区间
2.如果中间数小于数组的第一个元素,说明最小数存在前半段,范围缩小到第一个元素和中间数闭区间左开右闭区间。
3.如果中间数等于数组第一个元素,需要特殊处理。
3.1 如果中间数大于数组最后一个元素,说明最小数存在后半段, 范围缩小到中间数到最后一个元素左开右闭区间
如果不是递增序列,则取中间数。
1.如果中间数大于数组的第一个元素,说明最小数存在后半段,范围缩小到中间数到最后一个元素左开右闭区间
2.如果中间数小于数组的第一个元素,说明最小数存在前半段,范围缩小到第一个元素和中间数闭区间左开右闭区间。
3.如果中间数等于数组第一个元素,需要特殊处理。
3.1 如果中间数大于数组最后一个元素,说明最小数存在后半段, 范围缩小到中间数到最后一个元素左开右闭区间
3.2 如果中间数等于数组最后一个元素,则需分别找出这第一个元素到中间数,和中间数到最后一个元素这两个区间的最小数,然后对这两个最小数进行比较,最后取最小值。
3.3 如果中间数小于数组的最后一个元素,说明第一个元素也小于最后一个元素直接会返回如代码中的判断1,故不需要判断。
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 return findMin(num, 0, num.length-1); } public int findMin(int[] num ,int left ,int right){ if(num[left]<num[right]||left==right){ return num[left]; } int mid = (left+right)/2; if(num[mid]>num[left]){ return findMin(num, mid+1, right); }else if(num[mid]<num[left]){ return findMin(num, left, mid); }else{ if(num[mid]>num[right]) return findMin(num, mid+1, right); else return Math.min(findMin(num, left, mid), findMin(num, mid+1, right)); } }}
0 0
- 题目:寻找旋转排序数组中的最小值 II
- 寻找旋转排序数组中的最小值 II
- 寻找旋转排序数组中的最小值 II
- 寻找旋转排序数组中的最小值 II
- 寻找旋转排序数组中的最小值 II
- 题目:寻找旋转排序数组中的最小值
- LintCode-寻找旋转排序数组中的最小值 II
- lintcode 160 寻找旋转排序数组中的最小值 II
- Lintcode 寻找旋转排序数组中的最小值 II
- lintcode --寻找旋转排序数组中的最小值 II
- 寻找旋转排序数组中的最小值 II -LintCode
- LintCode-分治-寻找旋转排序数组中的最小值 II
- LintCode-寻找旋转排序数组中的最小值
- 寻找旋转排序数组中的最小值
- LintCode 寻找旋转排序数组中的最小值
- 寻找旋转排序数组中的最小值
- 寻找旋转排序数组中的最小值
- 寻找旋转排序数组中的最小值
- [hash 表达式树]UVa12219 - Common Subexpression Elimination
- MYSQL管理之主从同步管理
- SDUT 1400 马的走法 简单dfs
- LCD 显示文字与图片
- UVA 514 Rails
- 题目:寻找旋转排序数组中的最小值 II
- kafka无法关闭的解决方法
- SSH三大框架面试题
- Oracle优化技巧
- Unexpected Exception caught setting 'upfile' on 'class yuhao.action.FileAction: Error setting expres
- iOS-Core-Animation-Advanced-Techniques(七-2)
- 正则表达式基础1
- Move Zeroes
- 第2章 符号