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];
        }
    }
  • 相关阅读:
    前端JS 4
    前端JS 3
    前端JS 2
    前端JS 1
    JS的知识补丁
    去除inline-block元素间的空隙
    js中“||”和“&&”的高级用法
    WebAPP-1
    Node.js_1
    click和onclick的区别
  • 原文地址:https://www.cnblogs.com/yanhowever/p/10830140.html
Copyright © 2011-2022 走看看