LeetCode - Search for a Range *

本文深入探讨了二分查找算法的核心原理及其在搜索范围内的应用,通过具体实现展示了如何利用二分查找来确定目标元素的左右边界,提供了一种高效搜索策略。

二分查找。

先确定某个target的位置,然后分别二分查找其左右边界。

	vector<int> searchRange(int A[], int n, int target) {
		vector<int> res(2,-1);
		int i = 0, j = n-1;
		int mid;
		while(i<=j){
			mid = i+(j-i)/2;
			if(A[mid]==target)
				break;
			if(A[mid]<target)
				i = mid+1;
			else
				j = mid-1;
		}
		if(i>j)
			return res;
		i = 0;j = mid;
		int mid_left, mid_right;
		while(i<j){
			mid_left = i+(j-i)/2;
			if(A[mid_left]==target)
				j = mid_left-1;
			else
				i = mid_left+1;
		}
		res[0] = (A[i]==target?i:i+1);
		i = mid;j = n-1;
		while(i<j){
			mid_right = i+(j-i)/2;
			if(A[mid_right]==target)
				i = mid_right+1;
			else
				j = mid_right-1;
		}
		res[1] = (A[j]==target?j:j-1);
		return res;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值