A25117. 不变序列
填空题
容易
知识点
题目描述
不变序列
题目描述:
给定包含 n 个整数的序列,如果序列中出现了连续 k 个及以上的位置元素都相等,则称这些位置的元素组成的序列为不变序列。
请注意,对于同一段连续相等的元素,只统计最长的序列,而不重复计数其子序列。
如:序列 [6,4,4,4,4],只统计 [4,4,4,4],不用再统计其子序列,如 [4,4,4]。
请统计给定的序列中有多少个不变序列,并输出其中最长不变序列的长度。
例如:n = 10,k = 3;序列为 [1,3,2,2,2,6,4,4,4,4],其中不变序列有 2 个,分别是[2,2,2] 和 [4,4,4,4],其中最长不变序列的长度为 4。
输入描述:
第一行输入两个整数 n 和 k(1≤n≤300,2≤k≤n),整数之间以一个空格隔开;
第二行输入 n 个整数 ai(1≤ai≤1000,1≤i≤n),表示给定的序列,整数之间以一个空格隔开。
输入数据保证给定的序列中一定存在不变序列。
输出描述:
一行,输出两个整数,分别表示给定序列中不变序列的数量以及最长不变序列的长度,整数之间以一个空格隔开。
样例输入:
10 3
1 3 2 2 2 6 4 4 4 4样例输出:
2 4参考答案
#include <iostream>
using namespace std;
int main() {
int n, k, count = 0, maxLen = 0;
cin >> n >> k;
int arr[n];
for (int i = 0; i < n; i++) cin >> arr[i];
int currLen = 1; // 当前连续相同元素的长度
for (int i = 1; i < n; i++) {
if (arr[i] == arr[i - 1]) {
currLen++;
} else {
if (currLen >= k) {
count++;
maxLen = max(maxLen, currLen);
}
currLen = 1;
}
}
// 检查最后一段序列
if (currLen >= k) {
count++;
maxLen = max(maxLen, currLen);
}
cout << count << " " << maxLen << endl;
return 0;
}答案解析
遍历数组,统计连续相同元素的长度。当长度≥k时计数,并更新最大长度。
上一题
下一题