LeetCode 153. Find Minimum in Rotated Sorted Array 旋转数组的最小值

    xiaoxiao2022-07-04  122

    1. 题意

    假设按升序排序的数组在事先未知的某个点处旋转。(即[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。

    找到其中最小值。

    假设数组中不存在重复。  

    2.分析

    对于区间nums[lo, hi], (1) 如果nums[lo] < nums[hi],此区间是升序的,没有旋转,直接返回nums[lo]即为最小值。 若不满足(1) 则nums[lo] > nums[hi]; (2) 若nums[mi] >= nums[lo]         (nums[mi] >= nums[lo] > nums[hi] ,‘ = ’ 表示两个数的情况,例如[1, 0] 此时lo, mi都指向1的位置)          lo = mi + 1 (3) 若nums[mi] < nums[hi]          (nums[lo] > nums[hi] > nums[mi])          hi = mi;(此时的nums[mi],可能是最小值)

    3.实现

    class Solution { public: int findMin(vector<int>& nums) { if(nums.empty()) return 0; int lo = 0; int hi = nums.size() - 1; while(lo < hi) { if(nums[lo] < nums[hi]) return nums[lo]; int mi = lo + (hi - lo) / 2; if(nums[mi] >= nums[lo]) lo = mi + 1; else if(nums[mi] < nums[hi]) hi = mi; } return nums[lo]; } };

     

    最新回复(0)