LeetCode 在排序数组中查找元素的第一个和最后一个位置 C语言

  • 思路
    二分法查找
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int First(int *nums, int numsSize, int target){
     
    int low = 0;
    int high = numsSize-1;
    while(low <= high){
     
        int mid = low+((high-low)>>1);
        if(nums[mid] > target)
            high = mid-1;
        else if(nums[mid] < target)
            low = mid+1;
        else{
     
            if(mid==0 || nums[mid-1]!=target)
                return mid;
            else
                high = mid-1;
        }
    }
    return -1;
}
int Last(int *nums, int numsSize, int target){
     
    int low = 0;
    int high = numsSize-1;
    while(low <= high){
     
        int mid = low+((high-low)>>1);
        if(nums[mid] > target)
            high = mid-1;
        else if(nums[mid] < target)
            low = mid+1;
        else{
     
            if(mid==numsSize-1 || nums[mid+1]!=target)
                return mid;
            else
                low = mid+1;
        }
    }
    return -1;
}
int* searchRange(int* nums, int numsSize, int target, int* returnSize){
     
    int *a = (int *)malloc(2 * sizeof(int));
    a[0] = First(nums, numsSize, target);
    a[1] = Last(nums, numsSize, target);
    *returnSize = 2;
    return a;
}

你可能感兴趣的:(LeetCode 在排序数组中查找元素的第一个和最后一个位置 C语言)