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

1.0 解题报告

Q1:1470. 重新排列数组

/**Q1_method1:
*trick:以i为媒介,串联两边数组
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* shuffle(int* nums, int numsSize, int n, int* returnSize){

    
    /*s1:申请数组*/
    int *ret = (int *)malloc(sizeof(int)*numsSize);

    /*s2:已申请空间构建出新数组int ret[] ,大小为numsSize*/
    int i;
    
    for(i=0;i<n;++i)
    {
        *(ret+2*i) = *(nums+i);
        *(ret+2*i+1) = *(nums + i + n);
    }
  

    *returnSize = numsSize;

    return ret;

}

Q2:1929. 数组串联

/**Q2_method2:
 *trick:以i为媒介,串联两边数组
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* getConcatenation(int* nums, int numsSize, int* returnSize){

    int *ans= (int *)malloc(sizeof(int)*numsSize*2);
    int i;
    for(i=0;i<numsSize;++i)
    {
        ans[i]=nums[i];
        ans[numsSize+i] = nums[i];
    }

    *returnSize = 2*numsSize;

    return ans;

}

Q3:1920. 基于排列构建数组

/**
*trick:以i为媒介,串联两边数组
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* buildArray(int* nums, int numsSize, int* returnSize){

    int * ans=(int *)malloc(sizeof(int)*numsSize);

    int i;
    for(i=0;i<numsSize;++i)
    {
        *(ans+i) = *(nums+*(nums+i)) ;
    }
    *returnSize = numsSize;
    return ans;

}

Q4:1480. 一维数组的动态和

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* runningSum(int* nums, int numsSize, int* returnSize){
    /*竟然漏写了malloc,折腾半天才发现,如有问题,先从头到尾检查一遍*/
    int *ans = (int *)malloc(sizeof(int)*numsSize);

    int i,j;
    
    for(i=0;i<numsSize;++i)
    {
        int sum = 0;
        for(j=0;j<=i;++j)
        {
            sum += *(nums+j); 
        }

        *(ans + i) = sum;
    }

    *returnSize = numsSize;

    return ans;

}

Q5:剑指 Offer 58 - II. 左旋转字符串

/*Q5_method_1:*/
char* reverseLeftWords(char* s, int n){
    if(n == 0)
        return s;
    int i;
    int sum = strlen(s);
    char *ans = (char *)malloc(sizeof(char)*(sum+1));
    
    for(i=0;i<sum;++i)
    {
        *(ans+i) = *(s+(i+ n)%sum);
    }
    ans[sum] = '\0';
    return ans;
    
}

/*Q5_method_2:*/
char* reverseLeftWords(char* s, int n){
    if(n == 0)
        return s;
    int i;
    int sum = strlen(s);
    char *ans = (char *)malloc(sizeof(char)*(sum+1));
    
    /*如何确定目标:*/
    for(i=0;i<sum;++i)
    {
        *(ans+(i+sum-n)%sum) = *(s+i);/*i在“=”左侧,计算右侧,还是
        i在"="右侧,计算左侧的表达式是不一样的*/
    }
    ans[sum] = '\0';
    return ans;
    
}

2.思考总结:

(1)如果深入研究,时间不够用;
(2)对LeetCode的使用更加熟悉;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

地铁幽灵gyro

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值