zoukankan      html  css  js  c++  java
  • 旋转数组的最小元素

    比如数组[3,4,5,1,2就是已排序数组[1,2,3,4,5]的一个旋转数组。找出最小元素使用二分法,复杂度最小,为O(logn)。

    旋转数组有以下三种情况

    (1)最小值在首部,如[1,2,3,4,5]

    (2)最小值不在首部,如[3,4,5,1,2]

    (3)无法二分查找的特例,如[1,1,0,1,1,1,1,1],该数组使用二分法无法确定最小值在分界线的左侧还是右侧。此时只能使用遍历数组来查找

    代码:

    /**
     * Created by wuchao on 17-4-11.
     */
    import java.util.*;
    public class test {
        public static int array[] = {1,1,0,1,1,1,1};
        public static void main(String[] args) {
    
            findMin(array);
            System.out.println(findMin(array));
        }
        public static int findMin(int[] array){
            int index1=0;
            int index2=array.length-1;
            int indexMin = 0;
            //情况1,如果第一个元素大于等于最后一个元素,说明最小值不处在数组首部
            while(array[index1]>=array[index2]){
                if(index2-index1==1){
                    return array[index2];
                }
                int index = (index1+index2)/2;
                //情况3,如果array[index1],array[index].array[index2]相等,此时二分法不起效
                if(array[index1]==array[index] && array[index2]==array[index]){
                    int min = array[index1];
                    for(int i=index1;i<=index2;i++){
                        if(min>array[i]) min=array[i];
                    }
                    return min;
                }
                if(array[index]>=array[index1]){
                    index1=index;
                }else if(array[index]<=array[index2]){
                    index2=index;
                }
    
                return array[index2];
            }
            //情况2,反之,最小值处在首部,直接返回首部元素
            return array[index1];
        }
    }
    
  • 相关阅读:
    Day17_购物车
    Kali小技巧
    sqlserver误删数据库表恢复记录
    JS轮流播放视频和图片
    .net core使用ocelot---第八篇 Consul
    .net core使用ocelot---第七篇 服务发现
    .net core使用ocelot---第六篇 负载均衡
    .net core使用ocelot---第五篇 服务质量
    .net core使用ocelot---第四篇 限流熔断
    .net core使用ocelot---第三篇 日志记录
  • 原文地址:https://www.cnblogs.com/wuchaodzxx/p/6692343.html
Copyright © 2011-2022 走看看