求解旋转数组的最小数字

发布时间 - 2026-01-11 01:24:32    点击率:

求解旋转数组的最小数字

题目描述:

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小数组。例如数组{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 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 太平洋网站制作公司,网络用语太平洋是什么意思?  C#如何调用原生C++ COM对象详解  韩国服务器如何优化跨境访问实现高效连接?  如何快速启动建站代理加盟业务?  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  如何快速搭建二级域名独立网站?  微信推文制作网站有哪些,怎么做微信推文,急?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  Laravel如何发送系统通知?(Notification渠道示例)  网站图片在线制作软件,怎么在图片上做链接?  如何快速搭建高效香港服务器网站?  Internet Explorer官网直接进入 IE浏览器在线体验版网址  南京网站制作费用,南京远驱官方网站?  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  html5的keygen标签为什么废弃_替代方案说明【解答】  Laravel怎么在Blade中安全地输出原始HTML内容  网易LOFTER官网链接 老福特网页版登录地址  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  如何在云虚拟主机上快速搭建个人网站?  MySQL查询结果复制到新表的方法(更新、插入)  JavaScript如何实现音频处理_Web Audio API如何工作?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  详解Android图表 MPAndroidChart折线图  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  Laravel如何创建自定义中间件?(Middleware代码示例)  iOS验证手机号的正则表达式  网站制作免费,什么网站能看正片电影?  如何在橙子建站中快速调整背景颜色?  微信小程序 require机制详解及实例代码  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  如何确保西部建站助手FTP传输的安全性?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  大连 网站制作,大连天途有线官网?  如何有效防御Web建站篡改攻击?  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  如何正确下载安装西数主机建站助手?  Laravel用户密码怎么加密_Laravel Hash门面使用教程  如何快速搭建高效可靠的建站解决方案?  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  中国移动官方网站首页入口 中国移动官网网页登录  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  如何获取上海专业网站定制建站电话?