目录
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的使用更加熟悉;