【每日训练】排序子序列

news2025/2/24 10:24:48

目录

题目链接:

 输入输出描述&&测试用例:

解析:

程序:


题目链接:

排序子序列_牛客笔试题_牛客网 (nowcoder.com)

 输入输出描述&&测试用例:

 

测试用例:

输入:

6
1 2 3 2 2 1

输出:

2

解析:

题目描述:

        将整型数组的连续的数分成若干的连续排序子序列(排序子序列:非递增和非递减排序),问能划分出多少个这样的子序列。

思路:

        首先是连续的,那么我们找此排序子序列的基础上是遍历这个数组。

        那么先明确一个排序子序列:

         明确之后,我们需要在遍历数组的时候划分好两个区域。非递增序列只要满足递减序列的条件就可以进行统计,相对的非递减序列只要满足递增序列的条件就可以进行统计,如果相等就表示非递减非递增,此时跳到下一个值进行比较即可。

        跳到某一个序列区域后(使用ifelse语句),可以声明一个计数器,进行++操作就可以统计有多少个字序列了。但是注意如果要跳出此区域的话需要进行循环(连续的),比如测试用例:

        

        既然是遍历数组就需要注意边界控制。 

程序:

        使用C++程序进行编写,由于是输入n控制数组长度,所以我利用vector作为数组,利用resize一次性确定数组长度(也可以push_back),循环插入时可以利用[]进行操作。此处还涉及一个边界控制:因为遍历数组进行比较来确定区域的时候,是通过当前数和后一个数进行比较,必然用到下标进行访问。当下标超过数组长度就会发生越界访问。为了方便进行控制我们可以在resize的时候多设置一个,存储为0(数据只能是正整数)。因为这样遍历到最后一个元素就会进入非递增序列将最后一个序列进行统一。(也可以实现其他的控制边界方法)

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int n = 0, count = 0;  // 输入数组长度和计数子序列个数
    vector<int> v;  // 存放数据的数组
    cin >> n; 
    v.resize(n + 1);  // 为了方便边界控制,数组长度+1
    v[n] = 0;  // 最后一个元素置为0
    for (int i = 0; i < n; i++)
    {
        cin >> v[i];
    }
    
    int i = 0;  // 开始遍历数组进行统计序列
    while (i < n)
    {
        // 非递增区域
        if (v[i] > v[i+1])  // []中的i + 1就可以发现我们的边界控制的妙处了
        {
            count++;  // 序列数+1
            while (i < n && v[i] >= v[i + 1])  // 序列是一个连续区域,出需要循环遍历此区域完
            {  // 注意此处的等于,也表示是一个非递增区域哦
                i++;
            }
            // 结束循环,此处要么i == n 或者此处v[i] < v[i+1] 验证此处以及非递减区域了,此时i必须++,要不然将此数就会算入下一个区域,出现错误,主循环进入下一步即可
            i++;
        }
        else if (v[i] < v[i+1])  // 非递减区域,同理
        {
            count++;
            while (i < n && v[i] <= v[i + 1])
            {
                i++;
            }
            i++;
        }
        else{  // 值相等,跳过
            i++;
        }
    }
    cout << count << endl;  // 统计结束,输出结果
    return 0;
}

加油加油~

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计模式之美总结(重构篇)

title: 设计模式之美总结&#xff08;重构篇&#xff09; date: 2022-10-27 17:31:42 tags: 设计模式 categories:技术书籍及课程 cover: https://cover.png feature: false 文章目录1. 概述1.1 重构的目的&#xff1a;为什么要重构&#xff08;why&#xff09;&#xff1f;1.…

10月业务安全月报 | 美国将奇虎360和知道创宇列入黑名单;丰田泄露30万用户信息;苹果曝严重漏洞

导语&#xff1a;随着数字化的深入普及&#xff0c;业务愈加开放互联。企业的关键数据、用户信息、基础设施、运营过程等均处于边界模糊且日益开放的环境中&#xff0c;涉及利益流和高附加值的业务面临多样的安全隐患&#xff0c;随时可能遭遇损失&#xff0c;进而影响企业运营…

HashMap底层源码分析

文章目录HashMap底层源码分析1.观察HashMap成员变量1.1 HashMap的主要成员变量1.2 HashMap的构造方法1.3 put方法HashMap底层源码分析 前言 &#xff1a; 上文我们已经将哈希表学完了&#xff0c;下面就来简单的看一下源码&#xff0c;就结束我们的Map和Set 的学习   1.观察H…

灰度级形态学 - 顶帽变换和底帽变换

目录 1. 介绍 2. 代码实现 1. 介绍 顶帽变换和底帽变换就是图像的加减和开闭运算的结合 顶帽变换的公式为&#xff1a;原图 - 原图的开运算 这里结合开运算的几何图形解释来介绍顶帽变换。 因为开运算是结构元从下往上推动的过程&#xff0c;所以会删除图像灰度值相对周围高…

Dom对象总结案例实操(第二十课)

Dom对象总结案例实操(第二十课) 今天文章有点长 第一部分:回顾之前Dom对象我用了四篇文章对他进行了分开讲述Dom对象的用途,今天用几个案例实操一下. 之前我们Dom对象中了解过下面的内容 Dom对象的定义?Dom对象的节点操作&#xff0c;了解到了父节点 子节点 第一个 子节点 最…

利用Postman测试全屋智能接口

文章目录一、Postman概述二、利用Postman测试全屋智能接口&#xff08;一&#xff09;移动应用开发平台API说明V2.0&#xff08;二&#xff09;下载Postman&#xff08;三&#xff09;启动Postman&#xff08;四&#xff09;测试用户登录接口1、查看用户登录接口说明2、查看登录…

信号完整性测试

信号完整性测试----持续更新中示波器三要素&#xff1a;带宽采样率存储深度IIC信号测试:SPI信号测试USART信号测试RS232信号测试RS485信号测试CAN信号测试PWM信号测试示波器三要素&#xff1a; 示波器三个重要参数&#xff1a;带宽、采样率、存储深度 带宽 示波器的带宽&…

C语言实现windows,linux双版本下的进度条小程序,快来试一试吧

文章目录C语言缓冲区&#x1f680;1.输入缓冲区&#x1f347;模拟登录密码场景&#x1f347;从键盘将内容输入到内存的真正过程&#x1f347;解决方法&#xff1a;清空输入缓冲区&#x1f349;清掉一个字符&#x1f349;清空输入缓冲区所有字符&#x1f680;2.用户C语言级别的缓…

【jenkins部署冲突报错】一定要看!!!!!

背景 最近接手了新的项目&#xff0c;他的代码仓库的分支有点乱&#xff0c;dev、uat、master三个分支代码不同步&#xff0c;差别很大&#xff0c;甚至功能有些也不一样&#xff0c;所以&#xff0c;就导致在合并代码时要注意&#xff0c;最好新切一个分支A&#xff08;同步m…

inveta PLSB 点线面体 示例工程

https://github.com/inveta/demo/blob/main/Resource/demo.md点线面体生成 POI&#xff08;点&#xff09;ps.emitMessage(["spawn-POI","location:X0 Y0 Z0", // cm"icon:\uE998", // char"title:POI标题", // string"color…

单独用HTML javascript CSS 写三版99乘法表,我就是班里最靓的仔

☆ 99乘法表&#xff0c;这个从小学就让我们开始产生肌肉记忆的知识点&#xff0c;伴随一生。而一旦开始学习软件开发知识&#xff0c;99乘法表将是一个基础中不可逃避的巩固升级作业。 ☆ 口算背诵相信大家已经滚瓜烂熟了&#xff0c;一一得一&#xff0c;二二得四&#xff…

【Linux】超好用的编译工具 —— gcc/g++

文章目录 前言 一、安装gcc/g 二、背景知识 三、gcc如何完成 1.预处理&#xff08;进行宏替换&#xff09; 2.编译&#xff08;生成汇编&#xff09; 3.汇编&#xff08;生成机器可识别代码&#xff09; 4.连接&#xff08;生成可执行文件或库文件&#xff09; 5.记忆选项的小技…

Tomcat 实用安装教程

Tomcat的介绍 Tomcat是Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;的Jakarta 项目中的一个核心项目&#xff0c;由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持&#xff0c;最新的Servlet 和JSP 规范总是能在Tomcat 中得…

【模型训练】YOLOv7道路交通标志检测

YOLOv7道路交通标志检测 1、YOLOv7算法道路交通标志检测模型训练2、YOLOv7模型模型评估3、模型和数据集下载1、本项目采用YOLOv7算法实现对道路交通标志的检测和识别,在道路交通标志检测数据集中训练得到,我们训练了YOLOv7模型,经评估我们得出了各个模型的评价指标; 2、目标…

C · 初阶 | 循环语句

啊我摔倒了..有没有人扶我起来学习.... &#x1f471;个人主页&#xff1a;《CGod的个人主页》\color{Darkorange}{《CGod的个人主页》}《CGod的个人主页》交个朋友叭~ &#x1f492;个人社区&#xff1a;《编程成神技术交流社区》\color{Darkorange}{《编程成神技术交流社区》…

什么是跨域

目录 1 同源策略 2 什么是跨域 3 如何解决跨域 3.1 配置CROS 3.2 Nginx解决跨域问题 1 同源策略 跨域是指浏览器不能执行其他网站的脚本&#xff0c;是由浏览器的同源策略造成的&#xff0c;是浏览器加的安全限制。同源是指&#xff0c;域名&#xff0c;协议&#xff0c;端…

Android | WMS 解析(一)

前言 前段时间分析了 Window 的添加、更新和删除流程&#xff0c;也知晓了 Activity 、Dialog 和 Toast 中 Window 的创建过程&#xff0c;今天就接着上篇文章&#xff0c;看一下 WMS 的创建 以及WindowManager 添加 WIndow 后 WMS 是怎样进行操作的。上篇文章点这里直达&…

Linux下 gdb 调试打印函数局部变量

以下面代码&#xff0c;来说明一下&#xff0c;打印函数局部变量的操作&#xff0c;代码如下&#xff1a; #include <stdio.h>void fun1(void) {int data1 0;printf("data1: %d\n", data1); }void fun2(void) {int data2 1;fun1();printf("***data2: %…

联网智能门锁解锁智慧公租房

近年来&#xff0c;随着物联网技术的发展&#xff0c;愈来愈多的保障房、公租房、网约房、长短租公寓管理者们都在关注如何实现房屋智能管理&#xff0c;面对租户流动性大、管理复杂&#xff0c;房屋空置、闲置、非法转租&#xff0c;以及租户居住体验差等问题&#xff0c;无从…

【万字总结】C++——list的基本使用和模拟实现(建议收藏)

目录 一、list基本介绍 二、list的使用 1、list的初始化方式 2、list的增删查改 push_front和pop_front与push_back和pop_back insert erase 3、list迭代器的使用 正向迭代器 反向迭代器 4、list获取头尾元素 5、list容量操作 6、list的其他操作 sort splice r…