-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathd2.cpp
169 lines (152 loc) · 3.77 KB
/
d2.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
// Sliding window problems
// aim is to do 5 fixed size prob and 5 variable
// Q1- Maximum sum subarray of size K
// identification- array/string type, size, subarray/substring/etc
// window size always = endofwindow(j)-startOfWindow(i)+1
// start with i=0,j=0 and check
// j-i+1 < K -> j++ , also keep incrementing sum so that no number is added twice
// j-i+1 > K -> i++ , keep decrementing sum
// j-i+1 = K -> got correct subarray -> maintian and calc code and j++,i++ both incre and decre
// then we update the result variable like max with that subarray and whenever conditions are met we check and update that variable
// sliding window code using only one variable - for start of the window in the second loop use - (K-i) where i is the end of the window
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
int answer1(const vector<int> arr, int K)
{
int n = arr.size();
// creating first window
// if we create window in a separate loop then formula j-i+1 = K changes to j-i = K
int maxSum = INT_MIN;
int windowsum = 0;
// creating first window
for (int i = 0; i < K; i++)
{
windowsum += arr[i];
}
// second loop
for (int i = K; i < n; i++)
{
windowsum += arr[i] - arr[K - i];
maxSum = max(maxSum, windowsum);
}
return maxSum;
}
// using two pointers and one loop
int answer2(const vector<int> arr, int K)
{
int n = arr.size();
int maxSum = INT_MIN;
int windowsum = 0;
for (int i = 0, j = 0; j < n;)
{
if ((j - i + 1) < K)
{
windowsum += arr[j];
j++;
}
else if ((j - i + 1) == K)
{
windowsum += arr[j] - arr[i];
j++;
i++;
}
else
{
i++;
}
maxSum = max(maxSum, windowsum);
}
return maxSum;
}
// answer 2 revised
int answer3(const vector<int> arr, int K)
{
int n = arr.size();
int maxSum = INT_MIN;
int windowsum = 0;
for (int i = 0, j = 0; j < n;)
{
for (j; j < K; j++)
{
windowsum += arr[j];
}
maxSum = windowsum;
if (j < n + 1)
{
j++;
windowsum += arr[j] - arr[i];
i++;
maxSum = max(maxSum, windowsum);
}
}
return maxSum;
}
// answer 2 remade
int answer3(const vector<int> arr, int K)
{
int n = arr.size();
int windowsum = 0;
for (int j = 0; j < K; j++)
{
windowsum += arr[j];
}
int maxSum = windowsum;
for (int i = 0, j; j < n; j++, i++)
{
windowsum += arr[j] - arr[i];
maxSum = max(maxSum, windowsum);
}
return maxSum;
}
// max subarray revision
int answer4(const vector<int> arr, int K)
{
int n = arr.size();
int windowSum = 0;
for (int i = 0; i < K; i++)
{
windowSum += arr[i];
}
int maxSum = windowSum;
for (int i = K; i < n; i++)
{
windowSum += arr[i] - arr[i - K];
maxSum = max(maxSum, windowSum);
}
return maxSum;
}
// so next day revision I did with my instinct one variable 2 loop solution
int answer5(const vector<int> arr, int K)
{
int windowSum;
int n = arr.size();
for (int i = 0; i < K; i++)
{
windowSum += arr[i];
}
int maxSum = windowSum;
for (int i = K; i < n; i++)
{
windowSum += arr[i] - arr[i - K];
maxSum = max(windowSum, maxSum);
}
return maxSum;
}
int answer6(const vector<int> arr, int k)
{
int windowSum;
int n = arr.size();
for (int i = 0; i < k; i++)
{
windowSum += arr[i];
}
int maxSum = windowSum;
for (int i = k; i < n; i++)
{
windowSum = arr[i] - arr[i - k];
maxSum = max(maxSum, windowSum);
}
return maxSum;
}