C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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],遍历找到最小值。

代码

@H_90_0@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[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,请注明来意。
标签: