循环有序数组最小值练习
2017-02-25 22:43
197 查看
对于一个有序循环数组arr,返回arr中的最小值。有序循环数组是指,有序数组左边任意长度的部分放到右边去,右边的部分拿到左边来。比如数组[1,2,3,3,4],是有序循环数组,[4,1,2,3,3]也是。
给定数组arr及它的大小n,请返回最小值。
测试样例:
[4,1,2,3,3],5
返回:1
对于循环有序数组,如果begin小于end 那么最小值为arr[begin] ,否则判断arr[mid] ,如果arr[mid]小于arr[begin],最小值在begin mid之间,如果arr[mid]大于arr[end],最小值在mid和end之间,否则begin end mid 三者相等,只能进行遍历查找。
给定数组arr及它的大小n,请返回最小值。
测试样例:
[4,1,2,3,3],5
返回:1
对于循环有序数组,如果begin小于end 那么最小值为arr[begin] ,否则判断arr[mid] ,如果arr[mid]小于arr[begin],最小值在begin mid之间,如果arr[mid]大于arr[end],最小值在mid和end之间,否则begin end mid 三者相等,只能进行遍历查找。
class MinValue { public: int getMin(vector<int> arr, int n) { if(arr.empty()) return -1; if(n==1) return arr[0]; int low=0; int high=n-1; int mid=low+(high-low)/2; while(low<high&&mid!=low) { if(arr[low]<arr[high]) return arr[low]; else if(arr[low]>arr[mid]) high=mid; else if(arr[mid]>arr[high]) low=mid; else return findmin(arr,low,high); mid=low+(high-low)/2; } return findmin(arr,low,high); } int findmin(vector<int> arr,int low,int high) { int min=arr[low]; for(int i=low;i!=high+1;++i) { if(arr[i]<min) min=arr[i]; } return min; } };
相关文章推荐
- 循环有序数组最小值
- 寻找循环有序数组的最小值 Find Minimum in Rotated Sorted Array
- 循环有序数组最小值
- 循环有序数组(旋转数组)的最小值
- 局部最小值位置、元素最左出现、循环有序数组最小值
- 局部最小值位置、元素最左出现、循环有序数组最小值
- 每天一道LeetCode-----有序数组循环右移n位后,寻找最小值,数组中可能包含重复元素
- 【Java】给定一个有序整数数组,元素各不相同且按照升序排列,编写一个算法,创建一个高度最小的二叉查找树
- 【学习ios之路:C语言】数组.循环.语句总和运用试题练习
- 【百度面试题】循环有序数组的查找问题
- 有序数组最小绝对值。
- [LeetCode] 153. Find Minimum in Rotated Sorted Array 寻找旋转有序数组的最小值
- 个人练习数据结构之--------------关于线性数据的有序数组以及之上的二分法查找、不同排序方法的学习
- [LeetCode] Find Minimum in Rotated Sorted Array 寻找旋转有序数组的最小值
- [LeetCode]153 有序数组旋转后的最小值
- [LeetCode]154 有序数组旋转后的最小值 II
- [每日练习]面试题--将一个有序数组转化为二叉排序树
- 已知有序数组求最小深度二叉树
- 在循环有序数组里面检索指定的key的下标
- 给定一个有序数组(递增),构建一棵具有最小高度的二叉树