Skip to content

Commit 5e85ce2

Browse files
committed
feat: [arrays] Add 2pointers sliding window
* [strings] Format 2pointers sliding window code.
1 parent 6bce988 commit 5e85ce2

File tree

2 files changed

+76
-4
lines changed

2 files changed

+76
-4
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/**
2+
* Two pointers - sliding window technique - 01
3+
* ============================================
4+
*
5+
* This technique is used to find subarrays or substrings given a set of
6+
* conditions.
7+
*
8+
* Refer:
9+
*
10+
* https://www.geeksforgeeks.org/window-sliding-technique/
11+
* https://discuss.leetcode.com/topic/30941/here-is-a-10-line-template-that-can-solve-most-substring-problems
12+
*/
13+
14+
#include "tests.h"
15+
16+
/* ===========================================================================
17+
* Algorithms implementation
18+
* ===========================================================================
19+
*/
20+
21+
/* TC : O(n)
22+
* SC : O(1)
23+
*/
24+
#define _2p_sw_maxSumKConseq_desc \
25+
"Two Pointers - Sliding Window - " \
26+
"Maximum sum of K consequent elements"
27+
28+
int maxSumKConseq(const vi_t &a, int k)
29+
{
30+
int n = size(a);
31+
int r = 0, c = 0;
32+
fii (i, k) r += a[i];
33+
c = r;
34+
for (int i = k; i < n; i++) {
35+
c += a[i] - a[i - k];
36+
r = max(r, c);
37+
}
38+
return r;
39+
}
40+
41+
/* ===========================================================================
42+
* Test code
43+
* ===========================================================================
44+
*/
45+
#define _2p_sw_maxSumKConseq_check(i, k, e) \
46+
{ \
47+
int a = maxSumKConseq(i, k); \
48+
CHECK_EQ(e, a); \
49+
string im = format("array = {}, k = {}", to_string(i), k); \
50+
SET_CUSTOM_SUCCESS_MSG(im, to_string(a)); \
51+
SHOW_OUTPUT(i, a); \
52+
}
53+
54+
TEST(maxSumKConseq, _2p_sw_maxSumKConseq_desc)
55+
{
56+
vi2_t _a{
57+
{100, 200, 300, 400},
58+
{1, 4, 2, 10, 23, 3, 1, 0, 20},
59+
};
60+
vi_t _k{2, 4};
61+
vi_t _e{700, 39};
62+
int n = size(_a);
63+
fii (i, n) _2p_sw_maxSumKConseq_check(_a[i], _k[i], _e[i]);
64+
}
65+
66+
INIT_TEST_MAIN();

cpp/strings/2pointers-sliding-window-01.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
* Two pointers - sliding window technique - 01
33
* ============================================
44
*
5+
* Two pointers - sliding window technique is used to find subarrays or
6+
* substrings.
7+
*
58
* Refer:
69
*
710
* https://www.geeksforgeeks.org/window-sliding-technique/
@@ -19,17 +22,20 @@
1922
* SC : O(1)
2023
*/
2124

22-
#define _2p_sw_maxSubstrUniqChars_desc "Two Pointers - Sliding Window - " \
23-
"Longest Substring Without Repeating Characters"
25+
#define _2p_sw_maxSubstrUniqChars_desc \
26+
"Two Pointers - Sliding Window - " \
27+
"Longest Substring Without Repeating Characters"
2428

2529
int maxSubstrUniqChars(const string &s)
2630
{
2731
int n = size(s);
2832
int l = 0, r = 0, d = 0;
2933
vi_v(m, 128, 0);
3034
while (l < n && r < n) {
31-
if (!m[s[r]]++) r++, d = max(d, r - l);
32-
else m[s[l++]] = 0;
35+
if (!m[s[r]]++)
36+
r++, d = max(d, r - l);
37+
else
38+
m[s[l++]] = 0;
3339
}
3440
return d;
3541
}

0 commit comments

Comments
 (0)