关于算法的边界问题

关于算法的边界问题


  有很多算法思路很简单,但是具体要实现的时候总会碰到一些麻烦的边界问题,这边整理一下。

二分查找

  思路不用多说,先贴一种可行的代码

int binarySearch(vector<int> nums,int tar){
	// 第一个边界
	int l = 0, r = nums.size()-1;
	// 第二个边界
	while(l<=r){
		int m = (l + r)/2;
		if(nums[m] == tar)
			return m;	
		else if (nums[m]<tar)
			// 第三个边界
			l = m + 1;
		else 
			// 第四个边界
			r = m - 1;
	}
	return -1;
}

  从第一个边界我们就可以确定我们的搜索范围,这里r可以取nums.size()也可以取nums.size()-1,决定了我们的搜索范围区间是开还是闭,这里我选择了nums.size()-1,那么我们的搜索范围就应该是闭区间,那么在选择第二个范围时,即使l==r,依然是一个有意义的区间[l,r],否则就是[l,r),没有意义,所以我们这里的第二个边界应该取l<=r, 然后在第三第四个区间,自然就应该跳过明确不是target的位置m,分别取m-1或者m+1。这样边界条件就确定下来了,不需要死记硬背了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值