旋转数组的最小数字_牛客题霸_牛客网
描述
有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。
数据范围:1≤𝑛≤100001≤n≤10000,数组中任意元素的值: 0≤𝑣𝑎𝑙≤100000≤val≤10000
要求:空间复杂度:𝑂(1)O(1) ,时间复杂度:𝑂(𝑙𝑜𝑔𝑛)O(logn)
二分法,判右侧,注意,数组中有相等值
int minNumberInRotateArray(vector<int>& nums) {// write code hereint left =0;int right = nums.size()-1;while(left < right){int mid = (left + right)/2;if(nums[mid] > nums[right])left = mid+1;else if(nums[mid] == nums[right])right--;elseright = mid;}return nums[left];}
判左侧
int minNumberInRotateArray(vector<int>& nums) {// write code hereint left =0;int right = nums.size()-1;while(left < right){int mid = (left + right)/2;if(nums[mid] < nums[right])right = mid;else if(nums[mid] == nums[right])right--;else left = mid + 1;}return nums[right];}