前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >排序子序列

排序子序列

作者头像
AI那点小事
发布于 2020-04-18 12:05:08
发布于 2020-04-18 12:05:08
72900
代码可运行
举报
文章被收录于专栏:AI那点小事AI那点小事
运行总次数:0
代码可运行

牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为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最少划分为多少段排序子序列

输入例子: 6 1 2 3 2 2 1

输出例子: 2


AC代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
 * flag = 0 开始
 * flag = 1 严格递增(即不包含相等的情况)
 * flag = 2 严格递减(即不包含相等的情况)
 * 相等的时候我们什么也不做,最后对于我们结果加1即可
 */

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();
        int flag = 0;
        int res = 0;
        int last = in.nextInt();
        for(int i = 1 ; i < N ; i++){
            int now = in.nextInt();
            if (flag == 0){
                if ( now > last){
                    flag = 1;
                }else if(now < last){
                    flag = 2;
                }
            }else if( flag == 1){
                if ( now < last){
                    flag = 0;
                    res++;
                }
            }else{
                if ( now > last){
                    flag = 0;
                    res++;
                }
            }
            last = now;
        }
        //res++;
        System.out.println(res);

        in.close();
    }

}

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
牛牛的数列
牛牛现在有一个n个数组成的数列,牛牛现在想取一个连续的子序列,并且这个子序列还必须得满足:最多只改变一个数,就可以使得这个连续的子序列是一个严格上升的子序列,牛牛想知道这个连续子序列最长的长度是多少。 输入描述: 输入包括两行,第一行包括一个整数n(1 ≤ n ≤ 10^5),即数列的长度; 第二行n个整数a_i, 表示数列中的每个数(1 ≤ a_i ≤ 10^9),以空格分割。
AI那点小事
2020/04/18
6530
判断子序列
给定一个长度为 n 的整数序列 a1,a2,…,an 以及一个长度为 m 的整数序列 b1,b2,…,bm。
GeekLiHua
2025/01/21
350
膨胀的牛牛
牛牛以草料为食。牛牛有一天依次遇到n堆被施展了魔法的草料,牛牛只要遇到一堆跟他当前相同大小的草料,它就会把草料吃完,而使自己的大小膨胀一倍。一开始牛牛的大小的是A,然后给出牛牛依次遇到的n堆草料的大小。请计算牛牛最后的大小。 输入描述: 输入包括两行,第一行包含两个整数n和A(1 ≤ n ≤ 200, 1 ≤ A ≤ 1,000,000,000) 第二行包括n个整数,表示牛牛依次遇到的草料堆大小a_i(1 ≤ a_i ≤ 1,000,000,000)
AI那点小事
2020/04/18
3560
Day2 排序子序列、倒置字符串
分析:本题知识点为 字符与字符串+数组名与指针的区别+常量指针的特点,字符串由字符构成,并且会多出一个结束字符 '\0';数组中存储的数据位于 栈 区,是可读可写的,而常量指针所指向的数据位于 常量区,只可被读取;同时因为 常量区 中相同的数据只会存在一份,因此不同的常量指针指向的对象为同一个
北 海
2023/07/01
1410
Day2 排序子序列、倒置字符串
组队竞赛
牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。 例如: 一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3 一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3 一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2 为了让比赛更有看点,牛牛想安排队伍使所有队伍的水平值总和最大。 如样例所示: 如果牛牛把6个队员划分到两个队伍 如果方案为: team1:{1,2,5}, team2:{5,5,8}, 这时候水平值总和为7. 而如果方案为: team1:{2,5,8}, team2:{1,5,5}, 这时候水平值总和为10. 没有比总和为10更大的方案,所以输出10.
AI那点小事
2020/04/18
4540
网易校招真题二
题目描述 平面内有n个矩形, 第i个矩形的左下角坐标为(x1[i], y1[i]), 右上角坐标为(x2[i], y2[i])。
Tim在路上
2020/08/04
5660
1008. 数组元素循环右移问题 (20)
一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1……AN-1)变换为(AN-M …… AN-1 A0 A1……AN-M-1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
AI那点小事
2020/04/20
5300
1008. 数组元素循环右移问题 (20)
数组变换
牛牛有一个数组,里面的数可能不相等,现在他想把数组变为:所有的数都相等。问是否可行。 牛牛可以进行的操作是:将数组中的任意一个数改为这个数的两倍。 这个操作的使用次数不限,也可以不使用,并且可以对同一个位置使用多次。
AI那点小事
2020/04/18
5970
用Java解决贪心算法——删数问题
假设正整数n、s,s<n。设计算法对任一给定n位数,删除其中的s位后,使得剩下的位新数最小。
小颜同学
2023/08/21
3010
334. 递增的三元子序列
给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。 如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。 示例 1: 输入:nums = [1,2,3,4,5] 输出:true 解释:任何 i < j < k 的三元组都满足题意 示例 2: 输入:nums = [5,4,3,2,1] 输出:false 解释:不存在满足题意的
CaesarChang张旭
2021/06/17
2510
算法训练 区间k大数查询
接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。
AI那点小事
2020/04/20
4000
算法训练 区间k大数查询
创造新世界
众所周知计算机代码底层计算都是0和1的计算,牛牛知道这点之后就想使用0和1创造一个新世界!牛牛现在手里有n个0和m个1,给出牛牛可以创造的x种物品,每种物品都由一个01串表示。牛牛想知道当前手中的0和1可以最多创造出多少种物品。 输入描述: 输入数据包括x+1行:
AI那点小事
2020/04/20
3630
算法提高 队列操作
问题描述   队列操作题。根据输入的操作命令,操作队列(1)入队、(2)出队并输出、(3)计算队中元素个数并输出。 输入格式   第一行一个数字N。   下面N行,每行第一个数字为操作命令(1)入队、(2)出队并输出、(3)计算队中元素个数并输出。 输出格式   若干行每行显示一个2或3命令的输出结果。注意:2.出队命令可能会出现空队出队(下溢),请输出“no”,并退出。 样例输入 7 1 19 1 56 2 3 2 3 2 样例输出 19 1 56 0 no 数据规模和约定   1<=N<=50
AI那点小事
2020/04/20
4300
算法提高 队列操作
【算法专题】动态规划之子序列问题
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。 例如,[3, 6, 2, 7] 是数组[0, 3, 1, 6, 2, 2, 7] 的子序列。
YoungMLet
2024/03/01
2990
算法提高 9-1九宫格
问题描述   九宫格。输入1-9这9个数字的一种任意排序,构成3*3二维数组。如果每行、每列以及对角线之和都相等,打印1。否则打印0。 样例输出 与上面的样例输入对应的输出。 例:
AI那点小事
2020/04/20
3410
算法提高 9-1九宫格
第十届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)
请你找到最小的整数 X 同时满足: X 是 2019 的整倍数 X 的每一位数字都是奇数
红目香薰
2022/11/29
4520
第十届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)
挑战程序竞赛系列(3):2.3需要思考的动规
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014688145/article/details/71475303
用户1147447
2019/05/26
4560
网易校招真题一
为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。 输入描述: 每个输入包含一个测试用例。
Tim在路上
2020/08/04
4890
最长连续不重复子序列(蓝桥杯每日一题)
给定一个长度为 n的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。
GeekLiHua
2025/01/21
820
摩拜 [编程题] 排序次数
小摩有一个N个数的数组,他想将数组从小到大 排好序,但是萌萌的小摩只会下面这个操作:
week
2018/12/11
6410
相关推荐
牛牛的数列
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文