我需要在我的向量或数组中找到许多单调子向量或数组,它不会产生任何关系。例如,我有向量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;
}
答案 0 :(得分:0)
我相信这可以帮助您在一个向量中找到单调子向量的数量:
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处结束:从[0] = 1开始,如果v [i + 1]> 1,则可以容易地计算[i + 1] = a [i] + 1。 v [i]或1另有