博客
关于我
CSDN编程竞赛 ——— 第十期
阅读量:798 次
发布时间:2023-04-03

本文共 1155 字,大约阅读时间需要 3 分钟。

为了解决这个问题,我们需要找到给定整数序列中的倒置子序列。倒置子序列的定义是在排序后的数组中,子序列中的元素是递减的。我们的任务是找到这个倒置子序列的左值和右值,如果没有这样的子序列,则输出0 0。

方法思路

  • 问题分析:我们需要找到第一个递减的位置和最后一个递减的位置,这两个位置的元素即为倒置子序列的左右端点。
  • 算法选择:通过遍历数组找到第一个递减的位置和最后一个递减的位置。
  • 复杂度分析:该方法的时间复杂度为O(n),其中n是数组的长度。因为我们只需要两次线性遍历数组。
  • 解决代码

    #include 
    #include
    using namespace std;int main() { int n; cin >> n; vector
    v(n); for (int i = 0; i < n; ++i) { cin >> v[i]; } int i = -1; for (int i_pos = 0; i_pos < n - 1; ++i_pos) { if (v[i_pos] > v[i_pos + 1]) { i = i_pos; break; } } if (i == -1) { cout << "0 0" << endl; return; } int j = -1; for (int j_pos = n - 2; j_pos >= 0; --j_pos) { if (v[j_pos] > v[j_pos + 1]) { j = j_pos; break; } } if (j == -1) { cout << "0 0" << endl; return; } cout << v[j + 1] << ' ' << v[i] << endl; return;}

    代码解释

  • 读取输入:首先读取输入的整数n,然后读取n个整数存储在数组v中。
  • 找到第一个递减的位置:从数组开头开始遍历,找到第一个满足v[i] > v[i+1]的位置i。
  • 找到最后一个递减的位置:从数组末尾开始逆向遍历,找到最后一个满足v[j] > v[j+1]的位置j。
  • 输出结果:如果找到这两个位置,输出v[j+1]和v[i],否则输出0 0。
  • 通过这种方法,我们可以高效地找到倒置子序列的左右端点,并解决问题。

    转载地址:http://geefk.baihongyu.com/

    你可能感兴趣的文章
    OpenCV与AI深度学习 | 基于Python和OpenCV将图像转为ASCII艺术效果
    查看>>
    OpenCV与AI深度学习 | 基于PyTorch实现Faster RCNN目标检测
    查看>>
    OpenCV与AI深度学习 | 基于PyTorch语义分割实现洪水识别(数据集 + 源码)
    查看>>
    OpenCV与AI深度学习 | 基于YOLO11的车体部件检测与分割
    查看>>
    OpenCV与AI深度学习 | 基于YOLOv8的停车对齐检测
    查看>>
    OpenCV与AI深度学习 | 基于机器视觉的磁瓦表面缺陷检测方案
    查看>>
    Opencv中KNN背景分割器
    查看>>
    OpenCV中基于已知相机方向的透视变形
    查看>>
    opencv之模糊处理
    查看>>
    opencv保存图片路径包含中文乱码解决方案
    查看>>
    opencv图像分割2-GMM
    查看>>
    OpenCV学习(13) 细化算法(1)(转)
    查看>>
    OpenCV探索
    查看>>
    opencv笔记(1):图像缩放
    查看>>
    OpenCV(1)读写图像
    查看>>
    OpenCV:概念、历史、应用场景示例、核心模块、安装配置
    查看>>
    Openlayers Source基础及重点内容讲解
    查看>>
    openlayers 入门教程(八):Geoms 篇
    查看>>
    Openlayers中点击地图获取坐标并输出
    查看>>
    Openlayers图文版实战,vue项目从0到1做基础配置
    查看>>