zoukankan      html  css  js  c++  java
  • LeetCode 154 Find Minimum in Rotated Sorted Array II

    Follow up for "Find Minimum in Rotated Sorted Array":
    What if duplicates are allowed?

    Would this affect the run-time complexity? How and why?

    Suppose a sorted array 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.

    思路1:採用排序(jdk中的快排),时间复杂度为O(nlogn)。代码例如以下
    public class Solution {
    	public int findMin(int[] num) {
    		Arrays.sort(num);
    		return num[0];
    	}
    }

    思路2:採用一次性遍历。时间复杂度为O(n)。代码例如以下
    public class Solution {
        public int findMin(int[] num) {
            int  min=Integer.MAX_VALUE;
            for(int i=0;i<num.length;i++){
            	if(min>num[i])
            		min=num[i];
            }
            return min;
        }
    }
    思路3:採用折半查找,时间复杂度为O(logn),代码例如以下
    public class Solution {
    	public int findMin(int[] num) {
    		return minFind(num, 0, num.length - 1);
    	}
    
    	private int minFind(int[] num, int begin, int end) {
    		int middle = (begin + end) / 2;
    		if (begin == end) {
    			return num[begin];
    		} else if (end == begin + 1) {
    			return Math.min(num[begin], num[end]);
    		} else if (end == begin + 2) {
    			return Math.min(Math.min(num[begin], num[begin + 1]), num[end]);
    		}
    		if (num[begin] == num[end]) {
    			return Math.min(minFind(num, begin, middle),minFind(num, middle, end));
    		}
    		if (num[middle] < num[begin] && num[middle] <= num[end]) {
    			return minFind(num, begin, middle);
    		} else if (num[begin] <= num[middle] && num[end] < num[middle]) {
    			return minFind(num, middle, end);
    		} else if (num[begin] < num[middle] && num[middle] <= num[end]) {
    			return minFind(num, begin, middle);
    		}else if (num[begin] <= num[middle] && num[middle] < num[end]) {
    			return minFind(num, begin, middle);
    		}
    		return 0;
    	}
    }


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    async 和 await
    Nginx配置反向代理与负载均衡
    简单使用高德地图开放平台API
    layui select 动态赋值
    ERROR: Pool overlaps with other one on this address space
    解决docker镜像无法删除的问题
    伪静态问题导致前台页面无法通过地址栏访问
    ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule
    PHP使用引用实现无限极分类
    composer update -- memory_limit
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4721602.html
Copyright © 2011-2022 走看看