Skip to content

Commit 7fe4ea3

Browse files
Add 0209.长度最小的子数组.md C语言解法
1 parent 023ec69 commit 7fe4ea3

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

problems/0209.长度最小的子数组.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,5 +330,55 @@ def min_sub_array_len(target, nums)
330330
end
331331
```
332332

333+
C:
334+
暴力解法:
335+
```c
336+
int minSubArrayLen(int target, int* nums, int numsSize){
337+
//初始化最小长度为INT_MAX
338+
int minLength = INT_MAX;
339+
int sum;
340+
341+
int left, right;
342+
for(left = 0; left < numsSize; ++left) {
343+
//每次遍历都清零sum,计算当前位置后和>=target的子数组的长度
344+
sum = 0;
345+
//从left开始,sum中添加元素
346+
for(right = left; right < numsSize; ++right) {
347+
sum += nums[right];
348+
//若加入当前元素后,和大于target,则更新minLength
349+
if(sum >= target) {
350+
int subLength = right - left + 1;
351+
minLength = minLength < subLength ? minLength : subLength;
352+
}
353+
}
354+
}
355+
//若minLength不为INT_MAX,则返回minLnegth
356+
return minLength == INT_MAX ? 0 : minLength;
357+
}
358+
```
359+
360+
滑动窗口:
361+
```c
362+
int minSubArrayLen(int target, int* nums, int numsSize){
363+
//初始化最小长度为INT_MAX
364+
int minLength = INT_MAX;
365+
int sum = 0;
366+
367+
int left = 0, right = 0;
368+
//右边界向右扩展
369+
for(; right < numsSize; ++right) {
370+
sum += nums[right];
371+
//当sum的值大于等于target时,保存长度,并且收缩左边界
372+
while(sum >= target) {
373+
int subLength = right - left + 1;
374+
minLength = minLength < subLength ? minLength : subLength;
375+
sum -= nums[left++];
376+
}
377+
}
378+
//若minLength不为INT_MAX,则返回minLnegth
379+
return minLength == INT_MAX ? 0 : minLength;
380+
}
381+
```
382+
333383
-----------------------
334384
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>

0 commit comments

Comments
 (0)