LeetCode 2090. 从数组中一处最大值和最小值
#include <iostream>
using namespace std;
const int N = 100010;
int a[N]; // 原数组
int q[N], hh, tt; // 队列
int avg[N];
int n, m;
void deque()
{
int sum = 0; // sum表示队伍里面的所有元素的总和
bool flag = false; // true 表示队伍里有2 * m + 1个元素了
int length = 2 * m + 1; // 队伍最多有的元素个数
while (hh <= tt)
{
if (tt < n)
{
q[tt] = a[tt];
sum += q[tt ++];
}
if (tt - hh == length) flag = true;
if (flag && tt - hh == length)
{
int average = sum / length;
avg[m ++] = average; // 只有满足的才会被赋值,并且都是中间的数被赋值
}
if (flag) sum -= q[hh ++];
}
}
int main()
{
cin >> n >> m;
if (m * 2 + 1 > n)
{
cout << -1;
return 0;
}
for (int i = 0; i < n; i ++ ) cin >> a[i];
deque();
for (int i = 0; i < n; i ++ )
{
if (avg[i]) cout << avg[i] << " " ;
else cout << -1 << " ";
}
return 0;
}
第一想法就是队列,题目不难但是几个判断的顺序弄得有点久了,自己做题做的还是太少了