diff options
author | jack <[email protected]> | 2024-06-14 13:13:15 -0600 |
---|---|---|
committer | jack <[email protected]> | 2024-06-14 13:13:15 -0600 |
commit | d343a3b18dbaca9297d4f7b2280c4a16f0a5c8aa (patch) | |
tree | 96df922dae2a5073d9a50ea70c7aae6aa37e3ebe /min_size_subarr_sum.c | |
download | leetcode-d343a3b18dbaca9297d4f7b2280c4a16f0a5c8aa.tar.gz leetcode-d343a3b18dbaca9297d4f7b2280c4a16f0a5c8aa.zip |
initial
Diffstat (limited to 'min_size_subarr_sum.c')
-rw-r--r-- | min_size_subarr_sum.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/min_size_subarr_sum.c b/min_size_subarr_sum.c new file mode 100644 index 0000000..ee81734 --- /dev/null +++ b/min_size_subarr_sum.c @@ -0,0 +1,37 @@ +// 209. Minimum Size Subarray Sum +#include <limits.h> +#include <stdio.h> + +/* + * given an array of positive integer 'nums' and a positive integer 'target', + * return the minimal length of a subarray whose sum is greater than or equal to + * 'target'. if there is no such subarray, return 0 instead. + */ + +int minSubArrayLen(int target, int *nums, int nums_size) { + int sum = 0, cnt = INT_MAX, left = 0, right = 0; + for (int i = 0; i < nums_size; i++) { + right++; + sum += nums[i]; + if (sum >= target && (right - left) < cnt) + cnt = right - left; + while (sum > target) { + sum -= nums[left]; + left++; + if (sum >= target && (right - left) < cnt) + cnt = right - left; + } + } + if (cnt == INT_MAX) + return 0; + else + return cnt; +} + +int main() { + int n1[] = {2, 3, 1, 2, 4, 3}, n2[] = {1, 4, 4}, + n3[] = {1, 1, 1, 1, 1, 1, 1, 1}; + printf("%d\n", minSubArrayLen(7, n1, 6)); // expect: 2 + printf("%d\n", minSubArrayLen(4, n2, 3)); // expect: 1 + printf("%d\n", minSubArrayLen(11, n3, 8)); // expect: 0 +} |