LeetCode OJ ——Find Minimum in Rotated Sorted Array

来源:互联网 发布:医疗大数据公司排名 编辑:程序博客网 时间:2024/04/30 12:58

题目:
这里写图片描述

代码:


class Solution {public:    int findMin(vector<int>& nums) {        int left, right, medium;        left = 1;   //区间下标从1~nums.size()        right = nums.size();        medium = (nums.size() % 2 == 0) ? nums.size() / 2 : nums.size() / 2 + 1;        while (1)        {            if (right == left )   //寻找的区间只剩下一个元素,表示其他所有元素此前都被认定为非最小元素,故此元素为最小            {                return nums[medium - 1];                //break;            }            if (nums[medium - 1] > nums[medium]) //前一个数比其相邻的后一个数大,则后一个数一定是最小的元素            {                return nums[medium];                //break;            }            if (nums[medium-1] < nums[right-1]){ //如果medium < right,则将搜索范围缩小至左区间                right = medium;                medium = ((right - left + 1) % 2 == 0) ? (right - left + 1) / 2 : (right - left + 1) / 2 + 1;            }            else{               //如果medium > right,则将搜索范围缩小至右区间                left = medium;                medium = ((right - left + 1) % 2 == 0) ? (right - left + 1) / 2 : (right - left + 1) / 2 + 1;                medium = medium + left - 1;            }        }    }};

结果:
这里写图片描述


思路:
(1)既然是排序好的数字,从中间某处旋转一下,那么,从头往后找肯定费时间。,这里采用类似折半的方式可以很快速的缩小查找区间。
具体思路以一个实例进行解说:
这里写图片描述

0 0
原创粉丝点击