34. Find First and Last Position of Element in Sorted Array

题意:

一个有序数组中有重复元素,返回第一个和最后一个target的下标。要求O(logN)。

思路:

没什么好说的,还是二分法。

vector<int> searchRange(vector<int>& nums, int target) {
	int l = 0, r = nums.size() - 1, mid, sz = nums.size(), get = -1;
	if (sz == 0)
		return{ -1,-1 };
	while (l <= r) {
		mid = (l + r) / 2;
		if (nums[mid] == target) {
			get = mid;
			break;
		}
		else if (nums[mid] > target)
			r = mid - 1;
		else
			l = mid + 1;
	}
	if (get == -1)
		return{ -1,-1 };
	int first = get, last = get;
	while (first >= 1 && nums[first - 1] == nums[first])
		--first;
	while (last <= sz - 2 && nums[last + 1] == nums[last])
		++last;
	return{ first,last };
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 14:10
啊啊啊啊好幸福,妈妈是我找工作发疯前的一束光
榕城小榕树:你是我见过最幸福的牛客男孩
点赞 评论 收藏
分享
牛客83700679...:简历抄别人的,然后再投,有反馈就是简历不行,没反馈就是学历不行,多投多改只要技术不差机会总会有的
点赞 评论 收藏
分享
小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务