一、今日知识点总结:
二、今日做题记录:
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) {
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;
}
