这篇文章将为大家详细讲解有关利用C++怎么求旋转数组中的最小数字,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
成都创新互联公司是一家业务范围包括IDC托管业务,网络空间、主机租用、主机托管,四川、重庆、广东电信服务器租用,达州电信机房,成都网通服务器托管,成都服务器租用,业务范围遍及中国大陆、港澳台以及欧美等多个国家及地区的互联网数据服务公司。题目:把一个数组的最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增数组的旋转,输出旋转数组的最小元素。例如数组{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++怎么求旋转数组中的最小数字就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文题目:利用C++怎么求旋转数组中的最小数字-创新互联
当前URL:https://www.cdcxhl.com/article20/dpiejo.html
成都网站建设公司_创新互联,为您提供网站营销、手机网站建设、动态网站、网站设计公司、企业网站制作、关键词优化
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联