寒假作业Day 09

寒假作业Day 09

一、选择题

在这里插入图片描述

因为一开始的for循环,k<2NN,所以复杂度为2N方,而后面的M=10的while循环,则是10,复杂度为常数级,所以2N方+10,近似于N方,即O(N^2)

在这里插入图片描述

这是一个计算阶乘的递归函数,当n=0或者1的时候,无需递归,直接返回;而n=2开始,就需要递归n-1次,因此,递归调用的深度是n;又因为深度是n,而调用的时间复杂度为O(1),所以整个函数的时间复杂度为O(n)

在这里插入图片描述

这个函数中传递了一个n进去,初始化i=1,当i<=n时,i就一直乘以2,直到i>n时退出循环;我们拿几个数字举例子,n=1,那么循环1次;n=2,那么循环2次;n=4,那么循环3次…所以很明显,我们可以看出,这个函数的时间复杂度是O(logN)
解析:n近似=2 ^ i,则i近似=logN

4、动态顺序表中,( )操作需要检查是否需要扩容
A.删除 B.插入 C.初始化 D.清空

答案是插入:初始化会给一定的初始空间,不需要检查扩容;而删除和清空的意思其实大差不差,删除并不需要检查扩容,而是检查是否还有可以删除的元素;只有插入,需要检测是否有足够的空间使其可以插入元素进去

5、在长度为 X 的顺序表下标为 i 的位置前插入一个元素( 1 ≤ i ≤ X+1 ),元素的移动次数为( )
A. X - i + 1 B. X - i C. X D. X-1

答案选择B,X-i,如何计算大家可以自己画图解析~

二、编程题

在这里插入图片描述

int* runningSum(int* nums, int numsSize, int* returnSize){
    int* a=(int*)malloc(sizeof(int)*numsSize);//首先要malloc一个新数组
    if(a==NULL){
        perror("malloc fail");
        return NULL;
    }

    int i=0;
    a[0]=nums[0];

    for(i=1;i<numsSize;i++){
        a[i]=nums[i]+a[i-1];//根据规律放值进去
    }

    *returnSize=numsSize;//返回的数组大小
    return a;
}

在这里插入图片描述

//二分法
int searchInsert(int* nums, int numsSize, int target) {  
    int begin = 0;  
    int end = numsSize - 1;  
    while (begin <= end) {  
        int mid = begin + (end - begin) / 2;//是为了防止数值过大溢出,一般我们会想到的是(begin+end)/2
        if (nums[mid] > target) {  
            end = mid - 1;  
        } else if (nums[mid] < target) {  
            begin = mid + 1;  
        } else {  
            return mid;  
        }  
    }  
    // 循环结束后,begin 是第一个大于 target 的元素的索引  
    // 因此,target 应该插入在 begin 的位置  
    return begin;  
}
  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值