定义排序子序列Java,排序子序列-Java-牛客模拟三

package 模拟三;

import java.util.Scanner;

/**

* 题目描述:牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。

* 牛牛有一个长度为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

* @author 崔洪振367

* @version 创建时间:2017年5月23日 下午6:28:40

* 解题思路:题目大意:就是将一个给定的序列分成若干个子序列,这些子序列或增或减。

*

* 1)设置一个标志,当增序列或减序列发生时,标志发生变化。

* 2)设置的标志flag为1时,发生增序列的变化,为-1时发生减序列的变化。为0时序列状态(增或减)保持不变。

*/

public class Q2017_5排序子序列 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

while (sc.hasNext()) {

int n = sc.nextInt();

sc.nextLine();

int[] nums = new int

;

for (int i = 0; i < n; i++) {

nums[i] = sc.nextInt();

}

// 用一个标志来区分

int flag = 0;

int count = 1;// 统计能够划分的数组的个数

for (int i = 1; i < n; i++) {

if (nums[i] > nums[i - 1]) {// 递增情况:flag==1表示递增,不做任何动作

if (flag == 0) {

flag = 1;

}

if (flag == -1) {// 由递减变递增,count加1

flag = 0;

count++;

}

} else if (nums[i] < nums[i - 1]) {// 递减情况:flag==-1,表示递减,不做任何动作

if (flag == 0) {

flag = -1;

}

if (flag == 1) {// 此时有递增变递减,需要count加1

flag = 0;

count++;

}

}

}

System.out.println(count);

}

sc.close();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值