Skip to content

Commit 6b08b19

Browse files
authored
Merge pull request #128 from chipbk10/SlidingWindow
Sliding window
2 parents 5e97f89 + 5769ce9 commit 6b08b19

4 files changed

+90
-0
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package slidingwindow;
2+
3+
public class Problem1004_MaxConsecutiveOnesIII {
4+
5+
public int longestOnes(int[] A, int K) {
6+
int res = 0, count = 0;
7+
// 111001101111
8+
for (int i = 0, j = 0; i < A.length; i++) {
9+
if (A[i] == 0) {
10+
K--;
11+
while (K < 0) {
12+
if (A[j++] == 0) {
13+
K++;
14+
}
15+
count--;
16+
}
17+
}
18+
count++;
19+
res = Math.max(res, count);
20+
}
21+
22+
return res;
23+
}
24+
}

src/slidingwindow/Problem1248_CountNumberOfNiceSubarrays.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,20 @@ public int numberOfSubarrays_DP(int[] A, int k) {
5454
}
5555
return res;
5656
}
57+
58+
public int numberOfSubarrays_shortVersion(int[] A, int k) {
59+
60+
// (l+1)*(r+1)
61+
int res = 0, l = 0, count = 0;
62+
for (int i = 0, j = 0; i < A.length; i++) {
63+
count += A[i]%2;
64+
if (count == k) l = 0;
65+
while (count == k) {
66+
count -= A[j++]%2;
67+
l++;
68+
}
69+
res += l;
70+
}
71+
return res;
72+
}
5773
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package slidingwindow;
2+
3+
public class Problem1358_NumberOfSubstringsContainingAllThreeCharacters {
4+
5+
public int numberOfSubstrings(String s) {
6+
// abcabc
7+
// abc: 0-x = (0+1) = 1
8+
// abca: 1-x = (1+1) = 2
9+
// abcab: 2-x = (2+1) = 3
10+
// abcabc: 3-x = (3+1) = 4
11+
int na = 0, nb = 0, nc = 0, l = 0, res = 0;
12+
for (int i = 0, j = 0; i < s.length(); i++) {
13+
char c = s.charAt(i);
14+
if (c == 'a') na++;
15+
else if (c == 'b') nb++;
16+
else nc++;
17+
18+
// if (na > 0 && nb > 0 && nc > 0) l = 0;
19+
20+
while (na > 0 && nb > 0 && nc > 0) {
21+
c = s.charAt(j++);
22+
if (c == 'a') na--;
23+
else if (c == 'b') nb--;
24+
else nc--;
25+
l++;
26+
}
27+
28+
res += l;
29+
}
30+
31+
return res;
32+
}
33+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package slidingwindow;
2+
3+
public class Problem424_LongestRepeatingCharacterReplacement {
4+
5+
public int characterReplacement(String s, int k) {
6+
int n = s.length(), count[] = new int[26], max = 0, j = 0;
7+
for (int i = 0; i < n; i++) {
8+
char c = s.charAt(i);
9+
max = Math.max(max, ++count[c-'A']);
10+
while (i-j+1 - max > k) {
11+
c = s.charAt(j++);
12+
count[c-'A']--;
13+
}
14+
}
15+
return n-j;
16+
}
17+
}

0 commit comments

Comments
 (0)