测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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时计数,并更新最大长度。

上一题 下一题