[34]. 在排序数组中查找元素的第一个和最后一个位置
Posted Debroon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[34]. 在排序数组中查找元素的第一个和最后一个位置相关的知识,希望对你有一定的参考价值。
在排序数组中查找元素的第一个和最后一个位置
题目
算法设计:二分查找
进行两次二分查找(定制版本),第一次先查找【第一个大于等于target的数】,第二次再查找【第一个大于target的数】。
这题懂二分查找的定制版本即可,关于二分查找的定制版本,请猛击《二分查找的循环不变量》。
- 【第一个大于等于target的数】就是文中的【大于等于 key 的最小索引】
- 【第一个大于target的数】就是文中的【查找大于 key 的最小值 upper】
int* searchRange(int* nums, int numsSize, int target, int* returnSize)
*returnSize = 2; // 使用指针传参,得到ans的长度
int* ans = (int*)malloc(2*sizeof(int)); // 给答案数组ans分配内存
ans[0] = -1; ans[1] = -1;
if (numsSize == 0)
return ans;
int left, right, mid;
left = 0, right = numsSize; // 第一次搜索【开始位置】,左闭右开
while(left < right) // 搜索【第一个大于等于target的数】
mid = left + ((right-left) >> 1);
if (nums[mid] < target)
left = mid+1;
else
right = mid;
if (left == numsSize || nums[left] != target)
return ans;
ans[0] = left;
right = numsSize; // 第二次搜索【结束位置】,左闭右开
while(left < right) // 搜索【第一个大于target的数】
mid = left + ((right-left) >> 1);
if (nums[mid] <= target)
left = mid+1;
else
right = mid;
ans[1] = left-1;
return ans;
以上是关于[34]. 在排序数组中查找元素的第一个和最后一个位置的主要内容,如果未能解决你的问题,请参考以下文章
算法leetcode|34. 在排序数组中查找元素的第一个和最后一个位置(rust重拳出击)
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置 | Python