怎么实现输出最长序列起止位置啊?


#include 
#include
using namespace std;
#define N 14
int main() {
    /*4. 分离:给定一个数组,将其在局部最小值和局部最大值处进行分离,输出长
         度最长的那段序列,并且输出其起止位置。如:2 1 0 1 3 4 2 1 -1 0 1 2 3 5
         输出:2 1 0,0 1 3 4,4 2 1 -1,-1 0 1 2 3 5
         最长序列为 -1 0 1 2 3 5,起 9 止 14*/
    int name[14] = { 2, 1, 0, 1 ,3, 4 ,2, 1 ,-1, 0 ,1, 2, 3 ,5 };
    for (int i = 0; i < 14; i++) {
            cout << setw(3) << name[i];
 
        if (name[i] < name[i - 1] && name[i] < name[i + 1] && i>2) {
            cout << "," << endl;
            cout <3)<<name[i];
        }
        if (name[i] > name[i - 1] && name[i] >name[i + 1] && i>2) {
            cout << "," << endl;
           if(i<13)
               cout << setw(3) << name[i];
        }
    }
 
    return 0;
}

觉得可行还请 采纳:
可以使用双指针算法来实现:设两个指针left和right,一开始把它们都指向0,然后向后移动,直到找到第一个局部最小值,把left移到该位置,然后再向后移动,直到找到下一个局部最小值,把right移到该位置,继续重复此过程,直到right移到最后一个元素为止。最后,取left和right之间的区间长度最大的区间,即为最长序列。
代码如下:

#include <iostream>
using namespace std;

#define N 14

int main() {
    int name[N] = { 2, 1, 0, 1 ,3, 4 ,2, 1 ,-1, 0 ,1, 2, 3 ,5 };
    int left = 0, right = 0, max_len = 0, start = 0;
    for (int i = 1; i < N; i++) {
        if (name[i] > name[i - 1]) {
            right = i;
        } else {
            if (right - left + 1 > max_len) {
                max_len = right - left + 1;
                start = left;
            }
            left = i;
        }
    }
    if (right - left + 1 > max_len) {
        max_len = right - left + 1;
        start = left;
    }
    cout << "最长序列为:";
    for (int i = start; i < start + max_len; i++) {
        cout << name[i] << " ";
    }
    cout << ",起 " << start << " 止 " << start + max_len - 1 << endl;
    return 0;
}