0
点赞
收藏
分享

微信扫一扫

【学习报告】《LeetCode零基础指南》(第四讲)指针

一、今日知识点总结:

  • 学习了C语言中指针的概念
  • 认识了取地址运算和解引用运算
  • 了解了C语言的内存申请操作

二、今日做题记录:

1. 重新排列数组

int* shuffle(int* nums, int numsSize, int n, int* returnSize){
    int i;
    int *ret = (int *)malloc( sizeof(int) * numsSize );
    for(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;
}

在这里插入图片描述

2. 数组串联

int* getConcatenation(int* nums, int numsSize, int* returnSize){
    int i;
    int *ret = (int *)malloc(2 * numsSize * sizeof(int));
    for(i = 0; i < numsSize; ++i) {
        ret[i + numsSize] = ret[i] = nums[i];
    }
    *returnSize = 2 * numsSize;
    return ret;
}

在这里插入图片描述

3. 基于排列构建数组

int* buildArray(int* nums, int numsSize, int* returnSize){
    int i;
    int *ret = (int *)malloc( sizeof(int) * numsSize );
    for(i = 0; i < numsSize; ++i) {
        ret[i] =  nums[  nums[i] ];
    }
    *returnSize = numsSize;
    return ret;
}

在这里插入图片描述

4. 一维数组的动态和

int* runningSum(int* nums, int numsSize, int* returnSize){
    int i;
    int *ret = (int *)malloc( numsSize * sizeof(int) );
    for(i = 0; i < numsSize; ++i) {    // (1)
        ret[i] = nums[i];
        if(i) {
            ret[i] += ret[i - 1];                      
        }
    }
    *returnSize = numsSize;
    return ret;
}

在这里插入图片描述

5. 左旋转字符串

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

在这里插入图片描述

举报

相关推荐

0 条评论