[LeetCode153]Find Minimum in Rotated Sorted Array

本文介绍了一种使用二分法在轮转排序数组中寻找最小值的方法。通过判断中间元素与起始元素的关系来确定搜索范围,从而实现高效查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目来源:https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/    点击打开链接

Suppose a sorted array 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.

Subscribe to see which companies asked this question

这题要求在一个轮转了的排序数里面找到最小, 我可以用二分法来做。
首先我需要知道, 于一个区A, 如果A[start] < A[stop], 那么一定是有序的了。
在一个轮转的排序数A, 我首先取中元素的A[mid]mid = (start + stop) / 2。 因
有重复元素, 那么就有种情况:
A[mid] > A[start], 那么最小一定在右半区, 譬如[4,5,6,7,0,1,2], 中元素77 > 4, 最小元素
一定在[7,0,1,2]这边, 于是我们继续个区间查找。
A[mid] < A[start], 那么最小一定在左半区, 譬如[7,0,1,2,4,5,6]件元素22 < 7, 我们继续
[7,0,1,2]个区间查找。


class Solution153
{
public:
	int findMin(vector<int> & nums){
		int size = nums.size();
		 
		//cout << size<<endl;
		if (size == 0)
			return 0;
		else if (size == 1)
			return nums[0];
		else if (size == 2)
			return min(nums[0], nums[1]);

		int left = 0;
		int right = size - 1;
		//cout << size << endl;

		while (left < right-1){  //注意细节 -1
			if (nums[left] < nums[right]){
				return nums[left];
			}

			int mid = (left + right) / 2;
			if (nums[mid] > nums[left]){
				left = mid + 1;
			}
			else if (nums[mid] < nums[left]){
				right = mid;  //注意不是 mid-1
			}
		}
		return min(nums[left], nums[right]);
	}
};

int main(){
	Solution153 solution;
	{
		vector<int> vec = { 2,1 };
		//solution.findMin(vec);
		cout << solution.findMin(vec) << endl;
	}

	system("pause");
	return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值