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日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来