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

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

    思路:理解题目的子序列:即单调不具有极值

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #define n 10000
     4 
     5 int N;
     6 int A[n],res=0;
     7 
     8 int up(int i)//非递减
     9 {
    10     while((i!=N-1)&&A[i]<=A[i+1])
    11         ++i;
    12     return i;
    13 }
    14 
    15 int down(int i) //非递增
    16 {
    17     while((i!=N-1)&&A[i]>=A[i+1])
    18         ++i;
    19     return i;
    20 }
    21 int main()
    22 {
    23     scanf("%d",&N);
    24     for(int i=0;i<N;++i)
    25         scanf("%d",&A[i]);
    26     for(int i=0;i!=N;)
    27     {
    28         while(A[i]==A[i+1]) //相等就跳过
    29             ++i;
    30         if(A[i]<A[i+1])
    31             {i=up(i)+1;
    32             ++res;}
    33         else
    34             {i=down(i)+1;
    35             ++res;}
    36         printf("i:%d res:%d
    ",i,res);//此题不需要这行 
    37     }
    38     printf("%d",res);
    39 }

  • 相关阅读:
    #从零开始学Swift2.0# No.4 枚举, 元组, 数组和字典
    #从零开始学Swift2.0# No.3 基本数据类型
    #从零开始学Swift2.0# No.2 运算符和表达式
    #从零开始学Swift2.0# No.1 初识Swift
    MacOS下SVN的使用
    在Xcode中制作.a文件
    在Xcode中制作Framework
    Objective-C中的Runtime
    汉语字典或者词典的简单的ios小demo
    ios开发-UI进阶-核心动画-时钟动画小案例
  • 原文地址:https://www.cnblogs.com/olivegyr/p/6984515.html
Copyright © 2011-2022 走看看