int findMaxConsecutiveValues(int a[], int n, int val) {
int j = 0, cnt = 0;
for (int i = 0; i < n; i++)
{
for (; i < n && val == a[i]; cnt = max(cnt, i - j + 1), i++);
if (i < n && val != a[i]) j = i + 1;
}
return cnt;
}
int findMinConsecutiveValues(int a[], int n, int val) {
int j = 0, cnt = n, m = 0; // j慢指针, 连续val的最小个数, m当前遍历到的连续val的个数
for (int i = 0; i < n; i++) {
for (; i < n && val == a[i]; i++) // 统计每一片连续val值的个数
m++;
if (i < n && val != a[i]) { // 连续的val值中断时
if (m > 0) // m大于0时才能与上一片连续的val值的个数取min
cnt = min(cnt, m); // 获取当前最小连续val值的个数
m = 0; // 清零才能正确进行下一片连续val值的统计
j = i + 1; // 慢指针j指向刚统计好的连续val值的下一个数
}
}
return cnt;
}
int main() {
int a[] = { 0, 1, 1, 1, 1, 0, 1, 1, 2, 2, 2, 1, 1, 2, 2, 11, 0, 2, 2, 2, 2, 2, 1, 1 };
int n = sizeof(a) / sizeof(a[0]);
for (int i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
int val = 2;
printf("序列中连续且最少的%d的%d个数\n", val, findMinConsecutiveValues(a, n, val));
val = 1;
printf("序列中连续且最多的%d的%d个数\n", val, findMaxConsecutiveValues(a, n, val));
return 0;
}