今天没有跟上进度,就听懂了一题,
前言
今天没有跟上进度,就听懂了一题。这是我个人的一点理解。(用C语言)
一、思路- 根据k的值有三种情况,为了便于理解,直接将三种情况标明
- 如果k为0返回全0即可
- 如果k大于或小于0,分两种情况讨论,这里展开大于0的
- 如果i+k大于数组最右边下标,会回到数组起始开始算的第i + k - n个位置
- 如果小于数组最右边下标,则直接相加即可
- 小于0的情况也是一样
题目来自力扣
代码如下(示例):求和利用循环数组特性以及加头减尾的操作,进行性能调优 - 拆炸弹 - 力扣(LeetCode)
int* decrypt(int* code, int codeSize, int k, int* returnSize){
int i,j;
int val = 0;
int n = codeSize;
int *ret=(int*)malloc(sizeof(int)*n);
*returnSize=codeSize;
for(i = 0;i < n;i ++){
if(k > 0){
val=0;
for(j = i + 1;j <= i+k;j ++){
val += code[j % n];
}
}
else if(k < 0){
val=0;
for(j = i - 1;j >= i + k;j --){
val += code[(j % n + n) % n];
}
}
ret[i]=val;
}
return ret;



