【Java版oj】day02排列子序列

news2025/1/10 19:24:01

目录

一、原题再现

二、问题分析

三、完整代码


一、原题再现

链接:排序子序列_牛客笔试题_牛客网
来源:牛客网

[编程题]排序子序列

  • 热度指数:10105 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.
如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2

输入描述:

输入的第一行为一个正整数n(1 ≤ n ≤ 10^5)

第二行包括n个整数A_i(1 ≤ A_i ≤ 10^9),表示数组A的每个数字。

输出描述:

输出一个整数表示牛牛可以将A最少划分为多少段排序子序列

示例1

输入

6

1 2 3 2 2 1

输出

2

二、问题分析

        本题目的意思是找子序列,并求出子序列的个数。可能一开始会有点读不懂题目,我们直接看样例,画一个示意图演示:

如果后一个比前一个大或者后一个比前一个小,子序列数量就加一;如果后一个等于前一个,子序列数量保持不变。

        这里我选用了ArrayList列表,创建一个链表对象List<Integer> list = new ArrayList<>()。利用for循环和ArrayList中自带的add()方法,将元素添加进列表。使用双层循环,外层循环遍历整个列表(元素),内层循环使用if判断前一个元素和后一个元素的大小关系。

三、完整代码

import java.util.*;
public class Main{
   public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        List<Integer> list = new ArrayList<>();
        int n = sc.nextInt();
        for (int i = 0; i < n; i++) {
            int A_i = sc.nextInt();
            list.add(A_i);
        }
        int count = 0;
        if (list.size() <= 2) {
            count = 1;
        }
        for (int j = 0; j < list.size(); j++) {
            if ((j < list.size() - 1) && list.get(j) == list.get(j + 1)) {
                continue;
            } else if ((j < list.size() - 1) && list.get(j) < list.get(j + 1)) {
                while ((j < list.size() - 1) && list.get(j) <= list.get(j + 1)) {
                    j++;
                }
                count++;
            } else {
                while ((j < list.size() - 1) && list.get(j) >= list.get(j + 1)) {
                    j++;
                }
                count++;
            }
        }
        System.out.println(count);
    }
}

  


 

 

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

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

相关文章

水果店引流活动推荐_分享水果店微信小程序制作步骤

试试做个小程序拯救你的店&#xff01;让你做出有效果的活动&#xff0c;每笔钱都花在刀刃上&#xff01; 第一&#xff0c;提升水果销量&#xff0c;降低损耗 用水果店小程序做拼团、砍价、秒杀活动&#xff0c;并讲原本卖不完的水果&#xff0c;做成果盘吸引客人注册会员。上…

Manufactoria介绍及各关卡解法

Manufactoria解法Manufactoria基本介绍解法RobotoastRoboManufactoria基本介绍 Manufactoria是一个以制造工厂为背景的程序设计游戏。在游戏中&#xff0c;玩家需要在有限的平面空间中巧妙地排布传送带&#xff0c;打点器与分支器&#xff0c;完成识别或改写特定模式的字符串的…

6.AOP之转账案例

数据准备 CREATE TABLE account (id int(11) NOT NULL,name varchar(100) NOT NULL,money decimal(7,2) NOT NULL,create_time datetime(6) NOT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8;insert into account values(1,"steven",10000,"2022…

循环程序设计 乘法口诀表

凡是写循环程序 必须满足两个条件 一是存在相同的操作 二是有规律 对于乘法口诀表 我们都很熟悉 如下图是左下角的 探求一下 规律&#xff1a; 1 多个乘法 2 规律性 第一1行 1个乘法运算 1*1 第二2行 2个乘法运算 1*2 2*2 第三3行 3个乘法运算 1*3 2*3 3*3 第四4行 4个…

关于Linux的基础总结

关于Linux的基础总结 文章目录关于Linux的基础总结前言一、为什么Linux如此流行&#xff1f;1.原因2.Linux系统的版本二、Linux的基础命令1.目录结构2.文件命令1.ls2.pwd3.cd4.touch、mkdir5.cat、tail、head、tail、od、tee、more、less6.rm、cp、mv7.find、grep、xargs8.tar、…

voc To yolov5-6.1数据集格式转换

voc To yolov5-6.1数据集格式转换 已有的数据集操作第一步:划分训练集、验证集、测试集通过脚本文件(createImageSet.py)生成训练集和验证集本代码需要修改的地方:结果:第二步:vocToyolo1、Head_classes.json文件:Head_classes.json文件对应的代码:3、操作技巧:2、第二…

用Python画一个足球

文章目录前情提要先画六边形再画五边形前情提要 如果想优雅地绘制一个足球&#xff0c;那首先需要绘制正二十面体&#xff1a;用Python绘制正二十面体 其核心代码为 import numpy as np from itertools import product G (np.sqrt(5)-1)/2 def getVertex():pt2 [(a,b) fo…

【Flask框架】——07 request请求和 get请求 post请求

request参数 指定请求方式 在Flask中&#xff0c;可以定义路由默认的请求方式&#xff1a; 利用 methods 参数可以自己指定一个接口的请求方式 get方式&#xff1a;把请求参数放到为url的&#xff1f;后面&#xff0c;每个请求参数格式为&#xff1a;参数名参数值。参数之间…

全梯度下降算法、随机梯度下降算法、小批量梯度下降算法、随机平均梯度下降算法、梯度下降算法总结

一、常见梯度下降算法 全梯度下降算法(Full gradient descent&#xff0c;FGD&#xff09;随机梯度下降算法&#xff08;Stochastic gradient descent&#xff0c;SGD&#xff09;随机平均梯度下降算法&#xff08;Stochastic average gradient descent&#xff0c;SAGD&#…

12.9工作学习记录 课程统计 Echarts表格插件 Stream.map

课程统计接口要做的是 统计各个日期的用户观看人数 生成报表 sql就是根据日期分组 查出开始时间到结束时间这个区间范围内 每天有多少人观看 SELECT DATE(join_time) AS joinTime, COUNT(*) AS userCount FROM video_visitor <…

基于ServiceStage的微服务开发与部署(二)

目录 2.微服务开发与部署 2.1. 组织管理 2.2. 仓库授权 2.3. 微服务接入CSE 2.4. 基于源码构建软件包 2.5. 创建环境 2.6. 应用部署 2.7. 外网访问 2.微服务开发与部署 2.1. 组织管理 步骤 1 打开应用管理与运维平台控制台&#xff0c;在"软件中心"-"组织管理&q…

【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.4 点、线

本节对应的视频讲解&#xff1a;B_站_视_频 https://www.bilibili.com/video/BV1x14y1J7rn 完成了界面布局&#xff0c;以及添加了初始化数据&#xff0c;就可以开始真正绘制图形了 本节讲解如何绘制点、线 1. 基本点线的绘制 1.1 为 cboShape 关联信号槽 首先&#xff0c;…

NR 多天线传输过程 2- Scrambling -1

参考 《5G 无线系统设计与国际标准》 于威廉斯托林斯的《数据与计算机通信》 《south western university--Scrambling》 《Prof. Hitesh Dholakiya-- Scrambling》 前言 最近一次答辩&#xff0c;有同事问了LDPC 和 线性分组码有什么区别&#xff0c;当时只说出了应用场景…

Presto(OpenLookeng)之BloomFilter索引优化代码走读

一. 前言 本文计划通过走读代码来理解Presto&#xff08;其实是OpenLookeng&#xff09;中BloomFilter索引的建立以及Presto中利用BloomFilter索引对查询进行优化的执行流程。OpenLookeng BloomFilter索引的基本资料可以参考官网介绍&#xff1a;openLooKeng documentation。 二…

MacOS安装PyAudio

brew install portaudio pip install pyaudio docs&#xff1a;https://people.csail.mit.edu/hubert/pyaudio/docs/ pyaudio对象的open()方法&#xff1a; rate&#xff1a;取样频率channels&#xff1a;声道数format&#xff1a;取样值的量化格式 (paFloat32, paInt32, pa…

Node.js Event Loop 的三大常见理解误区和正确概念辨析

Node.js Event loop 监控器。高的 frequency 和低的持续时间是最理想的 event loop 状态。 上图显示三点半到五点半之间&#xff0c;event loop 的 frequency 骤降&#xff0c;然后 duration 居高不下。 Node.js 是一个基于事件的平台。 这意味着在 Node 中发生的一切都是对…

Windows无法读取驱动器中的光盘

一. 问题 在网上搜索了很多方法来解决下图的问题&#xff0c;一直失败。浪费了很多时间。后来发现&#xff0c;网上的方案可能恰恰是相反的思路。所以&#xff0c;留下个笔记吧。 二. 方法 1.打开本地服务管理器。按键盘的”WinR"组合键 打开“运行”窗口。输入“Serv…

汽车美容店会员管理系统开发步骤_分享会员系统小程序的优势

洗车店/汽车维修保养带店如何打开线上市场&#xff0c;获得更多目标用户呢&#xff1f; 除了服务的内容足够专业、优质以外&#xff0c;引入会员系统小程序就是关键一步。 汽修店为什么要做会员系统小程序&#xff1f;来看看行业现状&#xff1a; 1.竞争激烈&#xff1a;到处都…

Spring Boot与Web开发

Spring Boot与Web开发 SpringMVC快速使用 1.基于restful http接口 的CURD 2.调用rest http接口 通过RestTemplate调用 3.通过postman调用 通过MockMvc测试 4.通过swagger调用 添加依赖 添加swagger配置类 注意&#xff1a;访问的地址是&#xff1a;http://localhost:80…

【Java基础篇】基础知识易错集锦

在学习的路上&#xff0c;我们只记得学习新的知识&#xff0c;却忽略了一切新知识都是在旧知识的基础上&#xff1b;努力奔跑的过程中&#xff0c;也要记得常回头看看&#xff1b; 题目展示&#xff1a; 解析&#xff1a; abstract是抽象的意思&#xff0c;在java中&#xff0…