把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

//输入一个非递减排序的数组的一个旋转  说明这个非递减数组可能是递增数组如[1,2,3,4,5]这个数组的旋转数组是[3,4,5,1,2]  也可能是这样的[1,2,2,2,2]这个数组的旋转数组是[2,2,2,1,2] 总之 这个旋转结果中间值的左边部分和右边部分都是非递减的  而且左边部分比右边部分要大于或者等于

function minNumberInRotateArray(rotateArray)
{
  if(rotateArray.length===0){
  return 0;
}
var startIndex=0;
var endIndex=rotateArray.length-1;
var midIndex;
while(rotateArray[endIndex]<=rotateArray[startIndex]){//循环的控制条件  即旋转数组的第一个元素要大于等于旋转数组的最后一个元素
  if(endIndex-startIndex==1){//当数组中只有两个元素的时候,最后一个元素要小一些  赋值给midIndex输出
    midIndex=endIndex;
    break;
  }
  midIndex=Math.floor((endIndex+startIndex)/2);//取中间的索引值
  if(rotateArray[midIndex]==rotateArray[endIndex]&&rotateArray[midIndex]==rotateArray[startIndex]){//现在是[2,2,2,1,2]这种情况  通过循环得到最小元素
    var result=rotateArray[startIndex];//把第一个值设置为最小元素
      for(var i=0;i<rotateArray.length;i++){
        if(result>rotateArray[startIndex++]){//把第一个值与后面的元素比较  由于这个数组的特殊性 左边部分的第一个值是左边的最小元素  右边部分的第一个值是右边的最小元素  所以可以这样通过一层循环 比较
          result=rotateArray[startIndex++]
        }
      }
    return result;
  }
if(rotateArray[midIndex]>=rotateArray[startIndex]){//[3,4,5,1,2]这种情况  将中间的值作为第一个值  再来循环比较  
  startIndex=midIndex;
}else if(rotateArray[midIndex]<=rotateArray[startIndex]){//[2,2,1,2,2] 原数组是[1,2,2,2,2]
  endIndex=midIndex
}

}
  return rotateArray[midIndex]
}

求旋转数组的最小数字(剑指offer)的更多相关文章

  1. 旋转数组的最小数字 - 剑指offer 面试题8

    题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...

  2. 【C/C++】旋转数组的最小数字/ 剑指offer

    #include <bits/stdc++.h> using namespace std; class Solution { public: int minNumberInRotateAr ...

  3. 6、旋转数组的最小位置------------>剑指offer系列

    题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转, ...

  4. 【C语言】求旋转数组的最小数字,输入一个递增排序的数组的一个旋转,输出其最小元素

    //求旋转数组的最小数字,输入一个递增排序的数组的一个旋转,输出其最小元素 #include <stdio.h> #include <string.h> int find_mi ...

  5. 剑指offer六之求旋转数组的最小数字

    一.题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个 ...

  6. 剑指Offer - 九度1386 - 旋转数组的最小数字

    剑指Offer - 九度1386 - 旋转数组的最小数字2013-11-24 01:57 题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转 ...

  7. 剑指offer编程题Java实现——面试题8旋转数组的最小数字

    剑指offer面试题8:旋转数组的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1, ...

  8. 【Java】 剑指offer(10) 旋转数组的最小数字

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. ...

  9. 剑指Offer:旋转数组的最小数字【11】

    剑指Offer:旋转数组的最小数字[11] 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4 ...

随机推荐

  1. 简单Delphi程序设计

  2. ipc - System V 进程间通信机制

    SYNOPSIS 总览 # include <sys/types.h> # include <sys/ipc.h> # include <sys/msg.h> # ...

  3. Linux RAID磁盘阵列

    RAID磁盘阵列 什么是RAID RAID是磁盘阵列的英文缩写,多块磁盘组成了一个组合,一起完成存储任务,就是磁盘阵列. RAID几种常用的类别(组合) RAID0:条带卷:最低磁盘个数2+,空间利用 ...

  4. JS基础知识二

    JS控制语句 switch 语句用于基于不同的条件来执行不同的动作 <script> function myFunction(){ var x; var d=new Date().getD ...

  5. Linux系统nmtui/nmcli绑定双网卡为team

    今天给大家带来图形化界面网络配置工具—nmtui的使用方法,可以省去敲命令的繁琐,较少误操作,结果更加直观. 小知识: nmtui:Network Manager Text User Interfac ...

  6. VMware 问题

    桥接模式下,小鸡上不了网问题 多网卡导致的问题 解决:编辑-虚拟网络编辑器 选择vmnet0,然后点击右下角更改设置 把自动改为指定要桥接的网卡,然后点击确定,测试看看.

  7. logstash操作

    1.安装 1>安装java 2> #wget https://artifacts.elastic.co/downloads/logstash/logstash-5.6.3.tar.gz#t ...

  8. python算法(一)基本知识&冒泡排序&选择排序&插入排序

    本节内容: 算法基本知识 冒泡排序 选择排序 插入排序 1. 算法基本知识 1.1 什么是算法? 算法(algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为 ...

  9. java一键搭建新项目(地址)

    构建地址:   https://start.spring.io 文档地址:https://www.cnblogs.com/ityouknow/p/5662753.html

  10. qt5-工程文件的介绍--快捷键

    Ctrl+/    注释