C++ 中每个大小为 K 的子数组中的最大唯一元素
在这个问题中,我们给定一个整数数组和一个整数 K。我们的任务是创建一个程序,该程序将找到每个大小为 K 的子数组中的最大唯一元素,并且没有重复。
让我们举个例子来理解这个问题,
输入 -
array = {4, 1, 1, 3, 3}
k = 3输出 -
4 3 1
解释 -
Sub-array of size 3
Subarray {4, 1, 1}, max = 4
Subarray {1, 1, 3}, max = 3
Subarray {1, 3, 3}, max = 1为了解决这个问题,一个简单的方法是运行两个循环并创建子数组,找到不同的元素并打印其中的最大值。
但一个有效的解决方案是使用滑动窗口方法,使用哈希表和自平衡 BST 来查找最大元素。
因此,我们将遍历数组,对于长度为 k 的摘要,将元素的计数存储在哈希表中,并将元素存储在集合中(它将仅存储唯一元素)。并打印集合中的最大值,并在数组的每次迭代中执行相同的操作。
示例
程序说明我们解决方案的工作原理,
#include <bits/stdc++.h>
using namespace std;
void maxUniqueSubArrayElement(int A[], int N, int K){
map<int, int> eleCount;
for (int i = 0; i < K - 1; i++)
eleCount[A[i]]++;
set<int> uniqueMax;
for (auto x : eleCount)
if (x.second == 1)
uniqueMax.insert(x.first);
for (int i = K - 1; i < N; i++) {
eleCount[A[i]]++;
if (eleCount[A[i]] == 1)
uniqueMax.insert(A[i]);
else
uniqueMax.erase(A[i]);
if (uniqueMax.size() == 0)
cout<<"-1\t" ;
else
cout<<*uniqueMax.rbegin()<<"\t";
int x = A[i - K + 1];
eleCount[x]--;
if (eleCount[x] == 1)
uniqueMax.insert(x);
if (eleCount[x] == 0)
uniqueMax.erase(x);
}
}
int main(){
int a[] = { 4, 3, 2, 2, 3, 5};
int n = sizeof(a) / sizeof(a[0]);
int k = 4;
cout<<"The maximum unique element for a subarray of size "<<k<<" is\n";
maxUniqueSubArrayElement(a, n, k);
return 0;
}输出
The maximum unique element for a subarray of size 4 is 4 -1 5
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP