每周一道算法题(二十七)

本周题目难度级别‘Medium’

题目:给你一个升序的数组和一个数target,让你返回target在这个数组中的区间,若是没有则返回[-1,-1]

思路:这个没啥好说的,就是遍历找target的区间,直接看代码吧,根据代码注释很好理解:

/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* searchRange(int* nums, int numsSize, int target, int* returnSize) {
    //开辟空间
    int *result = malloc(sizeof(int) * numsSize);
    //新数组的下标
    int index = 0;
    //遍历数组,找出target的位置
    for (int i = 0; i < numsSize; i++) {
        if (nums[i] == target) {
            result[index] = i;
            index++;
        //因为是升序的数组,所以当大于target的时候就可以停止遍历了
        }else if(nums[i] > target) break;
    }
    //根据上面的注释要求,returnSize是返回数组的长度,都是2,写死就行
    *returnSize = 2;
    //如果没找到返回【-1,-1】
    if (index == 0) {
        result[0] = -1;
        result[1] = -1;
        return result; 
    //如果只有一个,区间是自己本身
    }else if(index == 1){
        result[1] = result[0];
        return result;
    }else {
    //返回区间
        result[1] = result[--index];
        return result;
    }
}

效率一般,其实也可以从中间开始找,毕竟是升序的数组,有兴趣的小伙伴可以自己尝试一下。。。

版权声明:本文为 Crazy Steven 原创出品,欢迎转载,转载时请注明出处!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容