题目如下:
一开始没看懂题目啥意思,直到看了示例才明白。所以解题思路应该是:nums数组的奇数位为对应偶数位出现的次数,因而要将其作为循环条件。
第一次提交的代码:
int* decompressRLElist(int* nums, int numsSize, int* returnSize){int *res &#61; (int *)malloc(sizeof(int)*numsSize);int k&#61;0;for(int i&#61;0;i<numsSize;i&#61;i&#43;2){for(int j&#61;0;j<nums[i];j&#43;&#43;){res[k&#43;&#43;]&#61;nums[i&#43;1];}}*returnSize &#61; numsSize;return res;
}
第一次提交的时候报了错&#xff1a;
一开始测试示例1的时候是没错的&#xff0c;因为我返回的数组的大小与原来的数组大小一致。而在提交的时候&#xff0c;两个数组大小不一样&#xff0c;我返回的数组其实只有3个元素&#xff0c;而我申请了4个元素的内存&#xff0c;多了的那一个因为没有赋值导致被“脏数据”给填充&#xff0c;所以一开始应该要先确定返回数组的大小&#xff0c;然后再申请对应大小的内存&#xff08;不仅是为了避免出错&#xff0c;同时还减少内存消耗&#xff09;。
所以修改如下&#xff1a;
int* decompressRLElist(int* nums, int numsSize, int* returnSize){* returnSize &#61; 0;for(int i&#61;0;i<numsSize;i&#43;&#61;2){*returnSize &#43;&#61; nums[i];}int *res &#61; (int *)malloc(sizeof(int)*(*returnSize));int k&#61;0;for(int i&#61;0;i<numsSize;i&#61;i&#43;2){for(int j&#61;0;j<nums[i];j&#43;&#43;){res[k&#43;&#43;]&#61;nums[i&#43;1];}}return res;
}
这次终于成功了。只是时间和空间消耗都不太理想。