大佬教程收集整理的这篇文章主要介绍了C++中求旋转数组中的最小数字(经典面试题),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
面试题:旋转数组的最小数字
题目:把一个数组的最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增数组的旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,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[R_251_11845@iddle],index2 = middle;
b.2如果arrY[index1] <= arrY[R_251_11845@iddle],index1 = middle;
b.3 如果arrY[index1] = arrY[R_251_11845@iddle] = arrY[index2],遍历找到最小值。
代码:
#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[R_251_11845@iddle])//arrY[R_251_11845@iddle]还在第一个递增序列中 { index1 = middle; } else { if(arrY[index1] >= arrY[R_251_11845@iddle])//arrY[R_251_11845@iddle]在第二个递增序列中 {index2 = middle;} if(arrY[index1] == arrY[index2] && arrY[index1] == arrY[R_251_11845@iddle]) { for(int i=0;i<size;++i) { if(arrY[R_251_11845@in]>arrY[i]) { min = i; break; } } } } } return arrY[R_251_11845@in]; }@H_616_34@ @H_90_0@min_RotateArray.cpp
#include"Min_RotateArray.hpp" int main() { int arrY[] = {3,2}; int size = sizeof(arry)/sizeof(arry[0]); int min = Min_RotateArray(arry,sizE); cout<<"The min is:"<<min<<endl; system("pause"); return 0; }@H_616_34@
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
以上是大佬教程为你收集整理的C++中求旋转数组中的最小数字(经典面试题)全部内容,希望文章能够帮你解决C++中求旋转数组中的最小数字(经典面试题)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。