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

作者: CrazySteven | 来源:发表于2017-09-24 18:44 被阅读530次

    本周题目难度级别‘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 原创出品,欢迎转载,转载时请注明出处!

    相关文章

      网友评论

        本文标题:每周一道算法题(二十七)

        本文链接:https://www.haomeiwen.com/subject/gpflextx.html