LeetCode OJ ——Find Minimum in Rotated Sorted Array

题目:
这里写图片描述

代码:


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值