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

    154. 寻找旋转排序数组中的最小值 II

    题目

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

    ( 例如,数组 [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

    思路

    需要在无重复的旋转数组中注意一个地方:在middle 和 end 相等的时候,让 end 自减 1 即可;

    代码

    class Solution {
        public int findMin(int[] nums) {
                   if (nums == null || nums.length == 0)
                return 0;
    
            int start =0;
            int end = nums.length-1;
            //第一个数小于最后一个数,说明是完全升序
            if (nums[start]<nums[end])
                return nums[start];
    
            int middle=0;
            while (start<=end){
                 middle = start +(end-start)/2; //需要保证不能 int 相加出现溢出
    
                //让中位数和右边的数字比较
                if (nums[middle]>nums[end]){
                    start = middle+1;
                }
                //如果 end = middle-1 的话,不能通过 {3,1,2}
                else if (nums[middle]<nums[end]){
                    end = middle;//因为这里的 end 可能就是最小值,不能加一
                }
                //如果中间和最后相等。怎么查找,主要前后移动方向不确定
                //无法确定的时候,让 右边的值自减就好了
                else {
                    end--;
                }
            }
                return nums[start]; 
        }
    }
  • 相关阅读:
    团队作业4_项目冲刺
    Scrum冲刺_Day07
    Scrum冲刺_Day06
    Srcum冲刺_Day05
    Day1-7【Scrum 冲刺博客集合】
    团队作业6——事后诸葛亮分析
    团队作业6——Alpha阶段项目复审
    团队作业5——测试与发布(Alpha版本)
    Day7 【Scrum 冲刺博客】
    Day6【Scrum 冲刺博客】
  • 原文地址:https://www.cnblogs.com/HuanChen1025/p/8999274.html
Copyright © 2011-2022 走看看