求旋转数组的最小数字(剑指offer)
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{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)的更多相关文章
- 旋转数组的最小数字 - 剑指offer 面试题8
题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...
- 【C/C++】旋转数组的最小数字/ 剑指offer
#include <bits/stdc++.h> using namespace std; class Solution { public: int minNumberInRotateAr ...
- 6、旋转数组的最小位置------------>剑指offer系列
题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转, ...
- 【C语言】求旋转数组的最小数字,输入一个递增排序的数组的一个旋转,输出其最小元素
//求旋转数组的最小数字,输入一个递增排序的数组的一个旋转,输出其最小元素 #include <stdio.h> #include <string.h> int find_mi ...
- 剑指offer六之求旋转数组的最小数字
一.题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个 ...
- 剑指Offer - 九度1386 - 旋转数组的最小数字
剑指Offer - 九度1386 - 旋转数组的最小数字2013-11-24 01:57 题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转 ...
- 剑指offer编程题Java实现——面试题8旋转数组的最小数字
剑指offer面试题8:旋转数组的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1, ...
- 【Java】 剑指offer(10) 旋转数组的最小数字
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. ...
- 剑指Offer:旋转数组的最小数字【11】
剑指Offer:旋转数组的最小数字[11] 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4 ...
随机推荐
- 简单了解node stream
Almost all Node.js applications, no matter how simple, use streams in some manner. 开篇先吓吓自己.画画图,分析分析代 ...
- Ubuntu分区方案(菜鸟方案、常用方案和进阶方案)
菜鸟方案 “/”与swap两个分区就可以应付绝大多数的应用 常用方案 分为3个区 1. 挂载点/:主分区:安装系统和软件:大小为30G:分区格式为ext4: 2. 挂载点/home:逻辑分区:相当于“ ...
- GitHub源码攻击事件
黑客擦除了微软多达392个代码存储库,并提出勒索要求.此前,黑客攻击了包含微软在内的大批受害者的Git存储库,删除了所有源代码和最近提交的内容,并留下了支持比特币支付的赎金票据. 勒索信息如下: “要 ...
- KVM虚拟化简介及安装
kvm是基于图形化的linux操作的 安装图形化界面的知识点: 磁盘空间有两个词: 精简置备:我先在我系统里面去声明我要一个50G的空间,但是呢,我不会把50G都分给你,你用多少,我分给你多少,但是做 ...
- 牛客练习赛47 A DongDong破密码 (异或性质,递推)
链接:https://ac.nowcoder.com/acm/contest/904/A 来源:牛客网 DongDong破密码 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1310 ...
- php set_magic_quotes_runtime() 函数过时解决方法
PHP5.3中 bool set_magic_quotes_runtime ( bool $new_setting )函数过时.把函数: set_magic_quotes_runtime($newse ...
- 三、Ubuntu16.04 安装Jira8.2.2(自带中文包)和破解
一.环境准备 (一)安装java Jira7.2的运行是依赖java环境的,也就是说需要安装jdk并且要是1.8以上版本,如下: java -version没有任何显示需要下载安装 1.下载链接:ht ...
- react-native启动时红屏报错:Unable to load script.Make sure you're either running a metro server or that ....
一.报错信息内容 我是在Android Studio中运行启动react-native项目时报的这个错误 1.报错提示:Unable to load script.Make sure you're e ...
- CentOS7位安装MySql教程
1.先检查系统是否装有mysql rpm -qa | grep mysql 2.下载mysql的repo源 wget http://repo.mysql.com/mysql-community-rel ...
- Taro 压缩图片api
Taro API里面没有写支持compressImage,ts提示也是,开发者工具提示暂时不支持此API调试,请使用真机进行开发.这是因为Taro这个库没有把新的api加上,其实还是调用了wx.com ...