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

举报
cznczai 发表于 2019/11/18 17:02:30 2019/11/18
【摘要】 * 扫描一遍```class Solution { public int findMin(int[] nums) { int n =nums[0] ; for(int i = 1 ; i< nums.length;i++) { if(n>nums[i]) n = nums[i]; } retu...

* 扫描一遍

```

class Solution {

     public int findMin(int[] nums) {

        int n =nums[0] ; 

        for(int i = 1 ; i< nums.length;i++) {

        if(n>nums[i])

        n = nums[i];

        }

        return n;

    }

}

```

* 扫描方法改进 找出通过旋转的条件可得 旋转点前是小一点数 旋转点后的数是大一点的数

```

class Solution {

    public static int findMin(int[] nums) {

        int n = nums.length ; 

        int flag = nums[n-1];

        for(int i = 0 ; i < n ; i++){

            if(nums[i]<flag)

                return nums[i];

        }

        return flag;

    }

}

```

* 二分 相比于前一道题 增加了多个相同的数

```

class Solution {

    public static int findMin(int[] nums) {

        int l = 0;

        int r = nums.length-1 ; 

        while(l<r){

            int mid = (l+r)/2;

            if(nums[l]<nums[r])  

                return nums[l];

            if(nums[mid]>nums[r])

                l = mid+1;  //而且mid不是最小值   [3,1,3]  0.5变为0 无法使mid变化  导致一直储在原地

            else if(nums[mid]<nums[l])

                r = mid;

            else r--;//避免了重复陷入死循环 而且最小值相对储在中间位置

        }

        return nums[l];

    }

}

//[3,1,3]

//[1,1]

//[1,3,5]

//[2,2,2,0,1]

//[2,0,0,0,1,2]

```


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。