在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target。
找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]。
示例:
输入: nums = [5,7,7,8,8,10], target = 8
输出: [3,4]
示例2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: [-1,-1]
int* searchRange(int* nums, int numsSize, int target, int* returnSize) {
int* array = (int*)malloc(2 * sizeof(int));
*returnSize = 2;
if (numsSize == 0) {
array[0] = -1;
array[1] = -1;
return array;
}
int left = 0;
int right = numsSize;
int mid = 0;
while (left <= right) {
mid = (left + right) / 2;
if (mid > numsSize - 1) {
left++;
break;
}
if (target < nums[mid]) {
right = mid - 1;
}
if (target > nums[mid]) {
left = mid + 1;
}
if (target == nums[mid]) {
if(numsSize==1||nums[mid]!=nums[mid+1]&&nums[mid]!=nums[mid-1]){
array[0] = array[1] = mid;
break;
}else if (target == nums[mid - 1]) {
array[0] = mid-1;
array[1] = mid;
break;
}
else if (target == nums[mid + 1]) {
array[0] = mid;
array[1] = mid+1;
break;
}
}
}
if (left > right) {
array[0] = -1;
array[1] = -1;
}
return array;
}
不知道为什么当测试用例是{2,2},target=2的时候会报地址越界错误,但是VS上没有问题啊,,我打了断点,一步一步看了的,没有越界的地方,唉~难顶!
本文探讨如何在升序排列的C语言整数数组中,以O(log n)的时间复杂度找到目标值的第一个和最后一个位置。当数组中不存在目标值时,返回[-1, -1]。针对示例和遇到的特殊情况,如数组{2, 2}和目标值2导致的边界错误问题进行了分析。"
105534284,8548839,分治算法解决魔法石问题,"['算法', 'c++']
389

被折叠的 条评论
为什么被折叠?



