全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

求解旋转数组的最小数字

求解旋转数组的最小数字

题目描述:

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

思路解析:

O(N)的算法

这种算法的思想就是遍历这个数组,由于这个数组是两部分有序的数组,因此遍历这个数组时当后一个数字小于前一个数字时,则后一个(即较小)一定为整个数组中最小的数字。

这种算法的思想很简单,但就是时间复杂度较大,因此不是很好的算法。

int minNumberInRotateArray(vector<int> rotateArray)
{
  if (rotateArray.empty())
    return -1;

  unsigned int i=0;
  for (; i<rotateArray.size()-1; i++)
  {
    if (rotateArray[i] > rotateArray[i+1])
      break;
  }
  return rotateArray[i+1];
}

O(logN)的算法

这种算法思想类似于二分查找,首先每次找到数组中中间的数字mid,如果mid大于最左端left,说明最小数在mid的右侧区间,则改变left,置left为mid;如果mid小于数组右侧right,说明最小数在mid的左侧区间,则改变right为mid….当left的数字小于等于right的数字时,说明已经找到最小数,这个也是循环结束的条件

int minNumberInRotateArray(vector<int> rotateArray)
{
  if (rotateArray.empty())
    return -1;
  unsigned int left=0;
  unsigned int right=rotateArray.size()-1;
  unsigned int mid=left;
  while (rotateArray[left] >= rotateArray[right])
  {
    if (right-left == 1)
    {
      mid = right;
      break;
    }
    mid = left+((right-left)>>1);

    if (rotateArray[mid]==rotateArray[left] && rotateArray[right]==rotateArray[mid])
      return rotateArray[mid];

    if (rotateArray[mid] >= rotateArray[left])
      left = mid;
    else if (rotateArray[mid] <= rotateArray[right])
      right = mid;
  }
  return rotateArray[mid];
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# 旋转数组的最小数字  # 旋转数组  # C++中求旋转数组中的最小数字(经典面试题)  # C语言输出旋转后数组中的最小数元素的算法原理与实例  # java旋转二维数组实例  # C++实现旋转数组的二分查找  # 遍历  # 组中  # 左端  # 很好  # 希望能  # 很简单  # 较小  # 谢谢大家  # 类似于  # 搬到  # 两部分  # 值为  # 但就  # 若干个  # 称之为  # class  # brush  # pre  # br  # strong 


相关文章: 如何用PHP快速搭建高效网站?分步指南  魔毅自助建站系统:模板定制与SEO优化一键生成指南  建站主机解析:虚拟主机配置与服务器选择指南  浅谈Javascript中的Label语句  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  南宁网站建设制作定制,南宁网站建设可以定制吗?  网站制作网站,深圳做网站哪家比较好?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  焦点电影公司作品,电影焦点结局是什么?  香港服务器租用每月最低只需15元?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  网站企业制作流程,用什么语言做企业网站比较好?  导航网站建站方案与优化指南:一站式高效搭建技巧解析  已有域名建站全流程解析:网站搭建步骤与建站工具选择  大连网站制作公司哪家好一点,大连买房网站哪个好?  建站主机如何安装配置?新手必看操作指南  如何选择靠谱的建站公司加盟品牌?  如何高效搭建专业期货交易平台网站?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  建站主机与服务器功能差异如何区分?  建站主机SSH密钥生成步骤及常见问题解答?  建站之星安装路径如何正确选择及配置?  如何用西部建站助手快速创建专业网站?  如何通过万网虚拟主机快速搭建网站?  ui设计制作网站有哪些,手机UI设计网址吗?  如何访问已购建站主机并解决登录问题?  如何在阿里云虚拟主机上快速搭建个人网站?  开源网站制作软件,开源网站什么意思?  济南专业网站制作公司,济南信息工程学校怎么样?  网站制作费用多少钱,一个网站的运营,需要哪些费用?  如何通过主机屋免费建站教程十分钟搭建网站?  建站之星如何实现五合一智能建站与营销推广?  建站主机功能解析:服务器选择与快速搭建指南  网站制作报价单模板图片,小松挖机官方网站报价?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  建站之星如何优化SEO以实现高效排名?  如何挑选优质建站一级代理提升网站排名?  制作网站的软件免费下载,免费制作app哪个平台好?  家庭服务器如何搭建个人网站?  活动邀请函制作网站有哪些,活动邀请函文案?  如何通过西部建站助手安装IIS服务器?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  如何选择适合PHP云建站的开源框架?  代刷网站制作软件,别人代刷火车票靠谱吗?  一键网站制作软件,义乌购一件代发流程?  建站之家VIP精选网站模板与SEO优化教程整合指南  高防服务器租用指南:配置选择与快速部署攻略  宝塔建站助手安装配置与建站模板使用全流程解析 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。