局部最大值

#include <iostream>
#include <queue>
using namespace std;
//输入一个数组和一个窗口,输出一个数组代表移动窗口的最大值
struct node
{
    int val;
    int index;
    node(int v, int i):val(v),index(i){}
};
struct cmp
{
    bool operator()(const node& n1, const node& n2)
    {
        return n1.val < n2.val;
    }
};
void maxVal(int A[], int n, int w)
{
    priority_queue<node, vector<node>, cmp> que;
    int re[w];
    for(int i=0; i<w; i++)
    {
        que.push(node(A[i], i));
    }
    for(int i=w; i<n; i++)
    {
        node t=que.top();
        re[i-w]=t.val;
        if(t.index<=i-w)
           que.pop();
        que.push(node(A[i],i));
    }
    re[n-w]=que.top().val;
    for(int i=0; i<=n-w; ++i)
        cout<<re[i]<<endl;
}
int main()
{
    int a[]={8,1,7,3,9,7,3};
    maxVal(a, 7, 3);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值