一个向量中的单调子向量的数目

Number of monotonus subvectors in one vector

本文关键字:向量 单调 一个      更新时间:2023-10-16

我需要在向量或数组中找到一些单调的子向量或数组,这并不重要。例如,我有向量1234421257843,这里有4个单调子向量。。。

1. 1 2 3 4 4 
2. 4 4 2 1 
3. 1 2 5 7 8
4. 8 4 3, and number is 4. 

我试过这样的东西,但不起作用。。。

int num(std::vector<int> v){
    int p(1),q(1);
    for(int i(0);i<v.size()-1;i++){
        if (v[i] > v[i+1] ) continue;
        else if(v[i] < v[i+1]) continue;
        else p++;
    } return p;
}

我相信这将帮助您在一个向量中找到单调子向量的数量:

int num(const std::vector<int>& v) {
    int p = 0;
    for (int i = 0; i + 1 < v.size(); ) {
        p += (v[i+1] >= v[i]);
        for (++i; (i + 1 < v.size()) && (v[i+1] >= v[i]); ++i) {
        }
        if (i + 1 == v.size())
            return p;
        p += (v[i+1] <= v[i]);
        for (++i; (i + 1 < v.size()) && (v[i+1] <= v[i]); ++i) {
        }
    }
    return p;
}

但若你们想找到最大的单调子向量,你们不需要这个。该任务可以在DP(动态编程)的帮助下解决:您需要两个额外的向量a(n)和d(n),其中a(i)/d(i)-是在位置i处结束的最长上升/下降子向量的长度:从a[0]=1开始,如果v[i+1]>v[i]或1,则可以很容易地计算a[i+1]=a[i]+1