Find Minimum in Rotated Sorted Array

xiaoxiao2021-02-28  79

思路:

依旧借用二叉搜索的方法,使用rank()函数。题目假设没有重复数字,可以肯定的是,循环结束是因为while条件不满足。此时必定有,将nums[i]>key不成立,在此前,nums[i]>key是一定成立的。

所以 i 是,像 “4 5 6 7”这样序列后移一位的下标,如果是序列是升序,没有翻转,i会会越界,注意判断。

if(nums[mid]>key) i=mid+1;

题目:

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

Find the minimum element.

You may assume no duplicate exists in the array.

class Solution { public: int findMin(vector<int>& nums) { int len=nums.size(); if(len==1) return nums[0]; int key=nums[0]; int i=1; int j=len-1; int mid; while(i<=j) { mid=(j-i)/2+i; if(nums[mid]>key) i=mid+1; else j=mid-1; } if(i>=len) return nums[0]; //防止没有翻转 return nums[i]; } };

转载请注明原文地址: https://www.6miu.com/read-83363.html

最新回复(0)