zoukankan      html  css  js  c++  java
  • 旋转数组中的最小值 8

    基于二分法

       

    index1为首,index2为尾,indexMid指向中间

       

    Number[index1]大于等于Number[index2]的条件满足时

       

    判断index2index1的差距是否等于1

       

    如果相等,说明index2即为那个突变点,最小值,将index2赋给indexMid,最终返回Number[indexMid]

       

    如果不等,就取indexMid=index1index2的中间值

       

    如果index1index2indexMid相等的话,那么就需要在index1index2之间用顺序查找

       

    如果不等,若index1指向的数小于indexMid指向的数,将index1更新为indexMid

       

    indexMId指向的数小于index2指向的数,将index2更新为indexMid

       

    顺序查找

       

    相邻两个数比较,如果前一个数大于后一个数,那么后一个数就是最小值。如果不是,则往后找

       

    package minNumberInRotatedArray8;

       

    public class OriCode_MinInRotatedNumber {

    public static void main(String[] args) {

    //                int[] numbers = { 3, 4, 5, 1, 2 };

    //                int[] numbers = { 1, 0, 1, 1, 1 };

    int[] numbers={1,1,1,0,1};

    int result = Min(numbers);

       

    System.out.println(result);

       

    }

       

    static int Min(int[] numbers) {

    int index1 = 0;

    int index2 = numbers.length - 1;

    int indexMid = index1;

    while (numbers[index1] >= numbers[index2]) {

    if (index2 - index1 == 1) {

    indexMid = index2;

    break;

    }

    indexMid = (index1 + index2) / 2;

    if (numbers[index1] == numbers[index2]

    && numbers[index1] == numbers[indexMid]) {

    return MinInOrder(numbers, index1, index2);

    }

    if (numbers[indexMid] >= numbers[index1]) {

    index1 = indexMid;

    } else if (numbers[indexMid] <= numbers[index2]) {

    index2 = indexMid;

    }

       

    }

    return numbers[indexMid];

       

    };

       

    static int MinInOrder(int[] numbers, int index1, int index2) {

    int result = numbers[index1];

    for (int i = index1 + 1; i < index2; i++) {

    if (result > numbers[i]) {

    result = numbers[i];

    }

    }

    return result;

       

    }

    }

  • 相关阅读:
    写个三个月后的我
    设置gridcontrol的焦点行
    希望我能更快的成长
    女人最想要的是什么
    初始化时查看combox的文本内容
    获取一个gridcontrol的数据行数
    第八章:Applet基础学习
    浅谈研发项目经理的技能要求
    学习C和C++应该看的书
    双缓冲绘图
  • 原文地址:https://www.cnblogs.com/keedor/p/4379324.html
Copyright © 2011-2022 走看看