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

HyDraZya 2021-11-26 09:26:40

学习文章来源于:《LeetCode零基础指南》(第五讲) 指针

 

第①题:1470. 重新排列数组

代码:

int* shuffle(int* nums, int numsSize, int n, int* returnSize){
	int* p=(int*)malloc(numsSize*sizeof(int));
	for(int i=0;i<n;i++){
		p[2*i]=*(nums+i);
		p[2*i+1]=*(nums+n+i);		
	}
	*returnSize=numsSize;	
	return p;
}

运行结果:

 

第②题:1929. 数组串联

代码:

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

运行结果:

第③题:1920. 基于排列构建数组

代码:

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

     return ret;
}

运行结果:

 


第④题:1480. 一维数组的动态和

代码:

int* runningSum(int* nums, int numsSize, int* returnSize){
     *returnSize = numsSize;
    for(int i =1;i<numsSize;i++){
        nums[i] = nums[i] + nums[i-1];
    }
    return nums;
}

 运行结果:

 


第⑤题:剑指 Offer 58 - II. 左旋转字符串

代码:

char* reverseLeftWords(char* s, int n){
        int strLen = strlen(s);
    char *str = (char *)malloc(strLen + 1);
    int i = 0;
    for (i = 0; i < strLen; i++) {

        str[i] = s[(n + i) % strLen];
       
    }
    str[strLen] = '\0';
    //printf("%s\n", str);
    return str;
}

运行结果:


 

第⑥题:1108. IP 地址无效化

代码:

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

运行结果:

(这题没啥思路用的英雄哥的做法 )

 


 

第⑦题:剑指 Offer 05. 替换空格

代码:

char* replaceSpace(char* s){
    char *ret = malloc( sizeof(char) * 30001 ); // (1)
    int i, retSize = 0;
    for(i = 0; s[i]; ++i) {
        if(s[i] == ' ') {
            ret[retSize++] = '%%';
            ret[retSize++] = '2';
            ret[retSize++] = '0';
        }else {
            ret[retSize++] = s[i];
        }
    }
    ret[retSize] = '\0';
    return ret;
}

运行结果:

 

(这题跟上一题的思路基本一致,沿用的英雄哥的思路)


第⑧题:1365. 有多少小于当前数字的数字

代码:

int* smallerNumbersThanCurrent(int* nums, int numsSize, int* returnSize){
    int* ret=malloc(sizeof(int)*numsSize);
    *returnSize=0;
    for(int i=0;i<numsSize;i++){
        int count=0;
        for(int j=0;j<numsSize;j++){
            if(nums[i]>nums[j]){
                count++;
            }
        }
        ret[(*returnSize)++]=count;
    }
    return ret;
}

运行结果:

 


 

第⑨题:剑指 Offer 17. 打印从1到最大的n位数

代码:

int* printNumbers(int n, int* returnSize){
    *returnSize = pow(10, n)-1;
    int *ret = malloc(sizeof(int) * (*returnSize));
    for(int i = 1; i<=*returnSize; i++){
        ret[i-1] = i;
    }
    return ret;
}

运行结果:

 


 

第⑩题:1389. 按既定顺序创建目标数组

代码:

int* createTargetArray(int* nums, int numsSize, int* index, int indexSize, int* returnSize){
    int i;
    int *ret = (int *)malloc(numsSize * sizeof(int));
    //循环嵌套
    for(i=0;i<indexSize;i++){
        for(int j=indexSize-1;j>index[i];j--){
            ret[j]=ret[j-1];
        }
        ret[index[i]]=nums[i];
    }
    *returnSize=indexSize;
    return ret;
}

运行结果:

 第一次双百哈哈哈!

 

 

打卡第四天,再接再厉!

...全文
17 6 收藏 回复
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复
相关推荐
发帖
万人千题
创建于2021-10-14

5.9w+

社区成员

学习「 算法 」的捷径就是 「 题海战略 」,社区由「 夜深人静写算法 」作者创建,三年ACM经验,校集训队队长,亚洲区域赛金牌,世界总决赛选手。社区提供系统的训练,答疑解惑,面试经验,大厂内推等机会
帖子事件
创建了帖子
2021-11-26 09:26
社区公告

添加群主微信:18368041307 进行《算法零基础100讲》每日打卡专项训练。