File tree 1 file changed +46
-0
lines changed
1 file changed +46
-0
lines changed Original file line number Diff line number Diff line change
1
+ // Time: O(n)
2
+ // Space: O(1)
3
+
4
+ // Sliding window solution.
5
+ class Solution {
6
+ public:
7
+ int minSubArrayLen (int s, vector<int >& nums) {
8
+ int start = -1 , sum = 0 , min_size = numeric_limits<int >::max ();
9
+ for (int i = 0 ; i < nums.size (); ++i) {
10
+ sum += nums[i];
11
+ while (sum >= s) {
12
+ min_size = min (min_size, i - start);
13
+ sum -= nums[++start];
14
+ }
15
+ }
16
+ if (min_size == numeric_limits<int >::max ()) {
17
+ return 0 ;
18
+ }
19
+ return min_size;
20
+ }
21
+ };
22
+
23
+ // Time: O(nlogn)
24
+ // Space: O(n)
25
+ // Binary search solution.
26
+ class Solution2 {
27
+ public:
28
+ int minSubArrayLen (int s, vector<int >& nums) {
29
+ int min_size = numeric_limits<int >::max ();
30
+ vector<int > sum_from_start (nums.size () + 1 );
31
+ partial_sum (nums.cbegin (), nums.cend (), sum_from_start.begin () + 1 );
32
+ for (int i = 0 ; i < nums.size (); ++i) {
33
+ const auto & end_it = lower_bound (sum_from_start.cbegin () + i,
34
+ sum_from_start.cend (),
35
+ sum_from_start[i] + s);
36
+ if (end_it != sum_from_start.cend ()) {
37
+ int end = static_cast <int >(end_it - sum_from_start.cbegin ());
38
+ min_size = min (min_size, end - i);
39
+ }
40
+ }
41
+ if (min_size == numeric_limits<int >::max ()) {
42
+ return 0 ;
43
+ }
44
+ return min_size;
45
+ }
46
+ };
You can’t perform that action at this time.
0 commit comments