数据结构(八十)
学习数据结构与算法过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。
—— 和为s的连续正数序列 ——
1.题目描述
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例
输入:
target = 9
输出:
[[2,3,4],[4,5]]
输入:
target = 15
输出:
[[1,2,3,4,5],[4,5,6],[7,8]]
2.代码
c
/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
int** findContinuousSequence(int target, int* returnSize, int** returnColumnSizes){
int mid = target / 2;
int **ans=malloc(sizeof(int*)*mid);
int *col=malloc(sizeof(int)*mid);
int i = 0,x = 1,y = 2,sum = x + y;
while(x <= mid){
if(sum < target){
y++;
sum += y;
continue;
}
else if(sum > target){
sum -= x;
x++;
}
else{
col[i] = y - x + 1;
ans[i] = malloc(sizeof(int) * col[i]);
for(int a = 0;a < col[i];a++)
ans[i][a]=a+x;
i++;
sum -= x;
x++;
}
}
*returnSize=i;
*returnColumnSizes=col;
return ans;
}
滑动窗口