旋转数组的最小数字
来源:互联网 发布:动漫网站源码整套 编辑:程序博客网 时间:2024/05/21 09:07
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
递归方法:
class Solution {public: bool validInput=true; int getNum(vector<int> arr,int i, int j) { if(i==j || i+1==j) return arr[i]>arr[j]?arr[j]:arr[i]; int mid=(i+j)/2; if(arr[i]==arr[mid] && arr[mid]==arr[j]) { int find1=getNum(arr,i,mid); int find2=getNum(arr,mid+1,j); return find1>find2?find2:find1; } else if(arr[mid]>=arr[i] && arr[mid]>arr[j]) i=mid; else j=mid; return getNum(arr,i,j); } int minNumberInRotateArray(vector<int> rotateArray) { int len=rotateArray.size(); if(len<=0) { validInput=false; return 0; } int i=0,j=len-1; return getNum(rotateArray,0,len-1); }};非递归方法:
int getMin(vector<int> arr,int i,int j) { int min=arr[i]; for(int k=i+1;k<=j;k++) { if(arr[k]<min) min=arr[k]; } return min; } int getNum(vector<int> arr, int i,int j) { int mid = 0; while(arr[i]>=arr[j]) { if(j-i==1) //若不加上这个条件,会出现死循环的哦!!!!!注意!!!! return arr[i]>arr[j]?arr[j]:arr[i]; mid=(i+j)/2; if(arr[i]==arr[mid] && arr[mid]==arr[j]) { return getMin(arr,i,j); } else if(arr[i]<=arr[mid] && arr[mid]>arr[j]) //注意这个条件啊,很容易弄错的 i=mid; else j=mid; } return arr[mid]; } int minNumberInRotateArray(vector<int> rotateArray) { int len=rotateArray.size(); if(len<=0) { validInput=false; return 0; } int i=0,j=len-1; return getNum(rotateArray,0,len-1); }
0 0
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- Light OJ 1289 LCM from 1 to n(lcm问题+内存优化)
- 海量数据处理-邮箱黑名单
- android组件式开发(1)——可复用的弹出式菜单
- 三星S5PV210启动相关的BLO/BL1/BL2之间的关系【转载学习】
- IOS 8 模拟器中工程的 .app路径和 沙盒路径的获取方式以及路径对比
- 旋转数组的最小数字
- unity3d 类的继承关系
- goquery使用
- 【转】回答的智慧
- 1.Python深入_对象的属性
- Linux下的I/O
- Spring DI 注解
- 用shape画虚线
- 《Web前端工程师修炼之道》学习笔记