//滑动窗口算法
int minSubArrayLen(int target, int* nums, int numsSize) {
int i =0;//起始指针
int result=INT_MAX;//最终结果
int sum = 0;//总和
for(int j=0;j<numsSize;j++){//从头开始移动终止指针
sum += nums[j];
while(sum>=target){//判断sum是否大于等于target
int subLength = j-i+1;
result = result<subLength?result:subLength;
sum = sum - nums[i];//求出新的总和
i++;//移动起始指针
}
}
return result==INT_MAX?0:result;
}
//暴力法
int minSubArrayLen(int target, int* nums, int numsSize) {
int sum;//总和
int result = INT_MAX;
for(int i=0;i<numsSize;i++){//从起始位置开始
sum = 0;//每次开始sum都清零
for(int j =i;j<numsSize;++j){//终止开始移动寻找符合条件的子数组
sum +=nums[j];
if(sum>=target){
int subLength = j-i+1;
result = result<subLength?result:subLength;
}
}
}
return result==INT_MAX?0:result;
}
二、59 螺旋矩阵 ||
int** generateMatrix(int n, int* returnSize, int**returnColumnSizes) {
*returnSize = n;
* returnColumnSizes = (int*)malloc(sizeof(int)*n);
int** nums = (int**)malloc(sizeof(int*) * n);
int i;
for(i = 0; i < n; i++) {
nums[i] = (int*)malloc(sizeof(int) * n);
(*returnColumnSizes)[i] = n;
}
int startx = 0 ;//行
int starty = 0;//列
int offset = 1;//控制终止位置
int count = 1;//填数
int mid = n/2;//当n为奇数时,mid=count
int loop = n/2;//缩短循环圈数
while(loop){
int i = startx;
int j = starty;
for(;j<starty+n-offset;j++)
nums[startx][j] = count++;
for(;i<startx+n-offset;i++)
nums[i][j] = count++;
for(;j>starty;j--)
nums[i][j] = count++;
for(;i>startx;i--)
nums[i][j] = count++;
startx++;
starty++;
offset+=2;
loop--;
}
if(n%2)
nums[mid][mid]=count;
return nums;
}