leetcode Find Minimum in Rotated Sorted Array

本文详细解析了二分查找算法中寻找最小数的优化策略,通过判断中间数左右相邻元素是否均大于该数来确定最小数的位置,同时处理边界条件,确保算法高效运行。

典型的二分查找类型,此题需要注意的是结束条件

因题目要求输出最小数,则每次得到中间值后,判断该中间值左右相邻(注意左右的边界情况)的两数是否均大于该中间值,

若均大于,则该中间值即为最小值,

若不满足,继续进行二分查找,在这个过程中,需要判断最小点出现哪一边,也即乱序的一边包含最小值


代码

class Solution {
public:
    int findMin(vector<int> &num) {
        
        int left = 0;
        int right = num.size()-1;
        
        while(left<=right)
        {
            int mid = (left+right)/2;
            
            bool leftFlag = true;
            bool rightFlag = true;   

			if((mid-1)>=left) 
			{
				if(num[mid-1]-num[mid]<0)
					leftFlag = false;
			}
			if((mid+1)<=right)
			{
				if(num[mid+1]-num[mid]<0)
				  rightFlag = false;
			}

            if(leftFlag&&rightFlag)
                return num[mid];
            
            if(num[mid] < num[right])
                right = mid - 1;
            else 
                left = mid + 1;
        }
        
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值