leetcode154. Find Minimum in Rotated Sorted Array II

来源:互联网 发布:照片管理 nas windows 编辑:程序博客网 时间:2024/06/06 00:05

154. Find Minimum in Rotated Sorted Array II

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

Find the minimum element.

The array may contain duplicates.

解法一

二分查找,如果遇到mid和end相等,则end-1。

public class Solution {    public int findMin(int[] nums) {        if (nums == null || nums.length == 0) {            return -1;        }        int start = 0;        int end = nums.length - 1;        int mid;        while (start + 1 < end) {            mid = start + (end - start) / 2;            if (nums[mid] == nums[end]) {                end--;            } else if (nums[mid] < nums[end]) {                end = mid;            } else {                start = mid;            }        }        return nums[start] <= nums[end] ? nums[start] : nums[end];    }}

这里写图片描述

解法二

一个for循环,找最小值,因为最坏的情况是[1,1,1,……,1]中有一个0,时间复杂度为O(n),相当于一个for循环

public class Solution {    public int findMin(int[] nums) {        if (nums == null || nums.length == 0) {            return -1;        }        int min = nums[0];        for (int i = 1; i < nums.length; i++) {            if (nums[i] < min) {                min = nums[i];            }        }        return min;    }}

这里写图片描述

1 0