C++中求旋转数组中的最小数字(经典面试题)

发布时间 - 2026-01-11 00:18:35    点击率:

面试题:旋转数组的最小数字

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

算法:

(1)当输入的旋转数组非法时:处理!
(2)当输入的旋转数组正常时,index1 = 0;index2=length-1:

   a:如果arry[index1] <arry[index2]时:说明数组为原数组,并没有进行旋转;
   b:如果arry[index1] >= arry[index2]时,middle = (index1+index2)/2:

       b.1如果arry[index1] >arry[middle],index2 = middle;
       b.2如果arry[index1] <= arry[middle],index1 = middle;
       b.3 如果arry[index1] = arry[middle] = arry[index2],遍历找到最小值。

代码:

Min_RotateArray.hpp

#pragma once 
#include<iostream> 
using namespace std; 
 
int Min_RotateArray(int arry[],int size) 
{ 
  if(arry == NULL || size <= 0) 
  {cout<<"参数输入错误!!!"<<endl;} 
  int min = 0; 
  int index1 = 0; 
  int index2 = size-1; 
  int middle = (index1+index2)/2; 
  if(arry[0] < arry[size-1]) 
    return arry[0]; 
  while(arry[index1] >= arry[index2]) 
  { 
    if(index2-index1 == 1) 
    { 
      min=index2; 
      break; 
       
    } 
    middle = (index1+index2)/2; 
    if(arry[index1] <= arry[middle])//arry[middle]还在第一个递增序列中 
    { 
      index1 = middle; 
    } 
    else             
    { 
      if(arry[index1] >= arry[middle])//arry[middle]在第二个递增序列中 
      {index2 = middle;} 
       
      if(arry[index1] == arry[index2] && arry[index1] == arry[middle]) 
      { 
        for(int i=0;i<size;++i) 
        { 
          if(arry[min]>arry[i]) 
            { 
              min = i; 
              break; 
            } 
        } 
 
      } 
    } 
  } 
  return arry[min]; 
} 

Min_RotateArray.cpp

#include"Min_RotateArray.hpp" 
 
int main() 
{ 
  int arry[] = {3,4,5,1,2}; 
  int size = sizeof(arry)/sizeof(arry[0]); 
  int min = Min_RotateArray(arry,size); 
  cout<<"The min is:"<<min<<endl; 
  system("pause"); 
  return 0; 
} 

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


# C++中求旋转数组中的最小数字  # 求旋转数组中的最小数字实例代码  # C++实现数组中元素组合出最大值  # C++实现从数组中同时取出最大最小元素算法示例  # 带你了解C++的数组与函数  # c++ 求数组最大最小值函数的实现  # 第一个  # 还在  # 遍历  # 希望能  # 第二个  # 谢谢大家  # 搬到  # 值为  # 若干个  # 称之为  # 最小值  # 面试题  # middle  # lt  # gt  # hpp  # Min_RotateArray  # pre  # strong  # br 


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


相关推荐: Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  如何快速打造个性化非模板自助建站?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  如何利用DOS批处理实现定时关机操作详解  Laravel怎么连接多个数据库_Laravel多数据库连接配置  5种Android数据存储方式汇总  浅谈javascript alert和confirm的美化  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  用v-html解决Vue.js渲染中html标签不被解析的问题  零服务器AI建站解决方案:快速部署与云端平台低成本实践  Laravel如何处理表单验证?(Requests代码示例)  PHP 500报错的快速解决方法  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  LinuxShell函数封装方法_脚本复用设计思路【教程】  linux top下的 minerd 木马清除方法  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  手机网站制作与建设方案,手机网站如何建设?  Swift中循环语句中的转移语句 break 和 continue  如何获取免费开源的自助建站系统源码?  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  Laravel定时任务怎么设置_Laravel Crontab调度器配置  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  Laravel如何处理异常和错误?(Handler示例)  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  android nfc常用标签读取总结  如何制作一个表白网站视频,关于勇敢表白的小标题?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  Android自定义listview布局实现上拉加载下拉刷新功能  简单实现Android文件上传  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  Laravel怎么实现模型属性的自动加密  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  利用 Google AI 进行 YouTube 视频 SEO 描述优化  如何在阿里云服务器自主搭建网站?  如何用AWS免费套餐快速搭建高效网站?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  如何快速配置高效服务器建站软件?  javascript读取文本节点方法小结  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  中国移动官方网站首页入口 中国移动官网网页登录  php 三元运算符实例详细介绍