zoukankan      html  css  js  c++  java
  • leetcode 154. 寻找旋转排序数组中的最小值 II java

    题目:

    假设按照升序排序的数组在预先未知的某个点上进行了旋转。

    ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。

    请找出其中最小的元素。

    注意数组中可能存在重复的元素。

    示例 1:

    输入: [1,3,5]
    输出: 1

    示例 2:

    输入: [2,2,2,0,1]
    输出: 0

    解题:

    如果序列旋转,序列去掉部分重复元素,会被分为两个序列,一个有序,一个无序,则最小值在无序序列。

    class Solution {
        public int findMin(int[] nums) {
            //如果旋转了,最小值一定在无序序列
            int left = 0, right = nums.length - 1;
            while(left < right){
                int mid = (left + right)/2;
                if(nums[mid] > nums[right]) //说明旋转后右半段序列为无序,则最小值在右半段序列
                    left = mid + 1;
                else if(nums[mid] < nums[right]) //若旋转说明左半段为无序,最小值在左半段;不旋转最小值也在左半段
                    right = mid;
                else //如果相等,去除重复值
                    right--;
            }
            return nums[left];
        }
    }
  • 相关阅读:
    iOS8 新特性
    iOS Autoresizing Autolayout Size classes
    tabBar的内部控件
    导航控制器的根控制器 是滚动性&普通的frame区别
    选择排序&冒泡排序&折半查找
    站内搜索
    Shell安装
    Xcode themes
    扫码跳转AppStore
    iOS手机APP命名规范整理
  • 原文地址:https://www.cnblogs.com/yanhowever/p/10830140.html
Copyright © 2011-2022 走看看