[学习报告]《LeetCode零基础指南》(第五讲)指针

打卡第四天,指针。
对指针一直不是很熟,需要再多找一点题练习。

1、重新排列数组
在这里插入图片描述

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* shuffle(int* nums, int numsSize, int n, int* returnSize){
    int *ret = (int *)malloc(numsSize*sizeof(int ));
    for(int i=0;i<numsSize;++i){
        if(i&1){
            ret[i]=nums[n+i/2];
        }else{
            ret[i] = nums[(i+1)/2];
        }
    }
    * returnSize = numsSize;
    return ret;
}

用到了位运算,去研究了一下才理解了这个题,hh

2、数组串联
在这里插入图片描述

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* getConcatenation(int* nums, int numsSize, int* returnSize){
    int *ret = (int *)malloc(2*numsSize*sizeof(int ));
    for(int i=0;i<numsSize;++i){
        ret[numsSize+i] = ret[i] = nums[i];
    }
    *returnSize = numsSize*2;
    return ret;
}

3、基于排列构建数组
在这里插入图片描述

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* buildArray(int* nums, int numsSize, int* returnSize){
    int * ret = (int *)malloc(numsSize*sizeof(int ));
    for(int i=0;i<numsSize;++i){
        ret[i] = nums[nums[i]];
    }
    *returnSize = numsSize;
    return ret;
}

4、一维数组的动态和
在这里插入图片描述

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* runningSum(int* nums, int numsSize, int* returnSize){
    int *ret = (int *)malloc(numsSize*sizeof(int ));
    for(int i=0;i<numsSize;++i){
        ret[i] = nums[i];
        if(i){
            ret[i] +=ret[i-1];
        }
    }
    * returnSize = numsSize;
    return ret;
}

这个题要再看一看理解一下,自己做的时候没有做出来,又重新去看题解了。

5、左旋字符串
在这里插入图片描述

char* reverseLeftWords(char* s, int k){
    int n = strlen(s);
    char *ret = (char *)malloc((n+1)*sizeof(char ));
    for(int i=0;i<n;++i){
        ret[i] = s[(i+k)%n];
    }
    ret[n] = '\0';
    return ret;
}

要记得字符串定义是char类型。还有,字符串长度要+1,是存放结尾处的\0。

6、IP地址无效化
在这里插入图片描述

char * defangIPaddr(char * address){
    char *ret = (char *)malloc(sizeof(char )*1000);
    int size=0;
    for(int i=0;address[i];++i){
        if(address[i]=='.'){
            ret[size++]='[';
            ret[size++]='.';
            ret[size++]=']';
        }else{
            ret[size++]=address[i];
        }
    }
    ret[size++]='\0';
    return ret;
}

7、替换空格
在这里插入图片描述

char* replaceSpace(char* s){
    int i=0;
    char *ans=(char*)malloc(sizeof(char)*strlen(s)*3+1);
    while(*s){
        if(*s==' '){
            ans[i++]='%';
            ans[i++]='2';
            ans[i++]='0';
        }else{
            ans[i++]=*s;
        }
        s++;
    }
    ans[i]=0;
    return ans;
}

8、有多少小于当前数字的数字
在这里插入图片描述

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* smallerNumbersThanCurrent(int* nums, int numsSize, int* returnSize){
    int *ret = (int *)malloc(numsSize*sizeof(int ));
    for(int i=0;i<numsSize;++i){
        ret[i]=0;
        for(int j=0;j<numsSize;++j){
            if(nums[j]<nums[i]){
                ++ret[i];
            }
        }
    }
    *returnSize = numsSize;
    return ret;
}

9、打印从1到最大的n位数

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* printNumbers(int n, int* returnSize){
    int i;
    int f=1;
    for(i=0;i<n;++i){
        f*=10;
    }
    --f;
    * returnSize = f;
    int *ret = (int *)malloc(f*sizeof(int ));
    for(i=1;i<=f;++i){
        ret[i-1]=i;
    }
    return ret;
}

10、按既定顺序创建目标数组
得再看看。。
在这里插入图片描述

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* createTargetArray(int* nums, int numsSize, int* index, int indexSize, int* returnSize){
    int len=0;
    int *ret = (int *)malloc(numsSize*sizeof(int ));
    int idx,ins;
    for(int i=0;i<numsSize;++i){
        idx=index[i];
        ins=nums[i];
        for(int j=len;j>idx;--j){
            ret[j]=ret[j-1];
        }
        ret[idx]=ins;
        ++len;
    }
    * returnSize = len;
    return ret;
}

以上
2021年11月26日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值