m0_75020004 2023-01-31 22:27 采纳率: 71.4%
浏览 12
已结题

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


#include <iostream>
#include<iomanip>
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 <<setw(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;
}
  • 写回答

1条回答 默认 最新

  • CodeBytes 2023-01-31 22:49
    关注

    觉得可行还请 采纳:
    可以使用双指针算法来实现:设两个指针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;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月8日
  • 已采纳回答 1月31日
  • 创建了问题 1月31日

悬赏问题

  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line