当前位置:   article > 正文

剑指offer(c++版本) (6)找旋转数组中的最小值(可直接运行)_c++剑指offer寻找旋转排序数组中的最小值

c++剑指offer寻找旋转排序数组中的最小值

目录

前言

一、题目

二、程序

1.头文件

2.类和主函数

前言

本人刷剑指offer的一些程序记录,头文件,主函数都齐全,可直接上机运行

一、题目

把⼀个数组最开始的若⼲个元素搬到数组的末尾,我们称之为数组的旋转。 输⼊⼀个⾮递减排序的数组的⼀个旋转,输出旋转数组的最⼩元素。 例如:数组{3,4,5,1,2} {1,2,3,4,5} 的⼀个旋转,该数组的最⼩值为 1 NOTE :给出的所有元素都⼤于 0 ,若数组⼤⼩为 0 ,请返回 0

二、程序

1.头文件

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;

2.类和主函数

  1. class solution
  2. {
  3. public:
  4. int MinRotateArray(vector<int> array)
  5. {
  6. if(array.size()==0) return 0;
  7. int left=0;
  8. int right=array.size()-1;
  9. int mid=0;
  10. while(array[left] >= array[right])
  11. {
  12. if(right-left==1)
  13. {
  14. mid=right;
  15. break;
  16. }
  17. mid=left+(right-left)/2;
  18. //特殊情况,原数组非递增也非递减
  19. if(array[left]==array[right] && array[left]==array[mid])
  20. return MinOrderArray(array,left,right);
  21. if(array[mid]>=array[left]) left=mid;
  22. else right=mid;
  23. }
  24. return array[mid];
  25. }
  26. private:
  27. int MinOrderArray(vector<int> array,int left,int right)
  28. {
  29. int min=left;
  30. for(int i=left+1;i<=right;i++)
  31. {
  32. if(array[min]>array[i]) min=i;
  33. }
  34. return array[min];
  35. }
  36. };
  1. int main()
  2. {
  3. int n,data;
  4. vector<int> array;
  5. cout<<"请输入数组的初始长度:"<<endl;
  6. cin>>n;
  7. cout<<"请初始化数组"<<endl;
  8. for(int i=0;i<n;i++)
  9. {
  10. cin>>data;
  11. array.push_back(data);
  12. }
  13. cout<<"最小值为:"<<endl;
  14. solution stu;
  15. cout<<stu.MinRotateArray(array)<<endl;
  16. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/43660
推荐阅读
相关标签
  

闽ICP备14008679号