java实现求一个数组中有多少个子序列
2017-05-25 17:24
567 查看
import java.util.Scanner; /** * 牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A, * 他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列. * 如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2 * * @author pomay * */ public class Nowcode_sonsequence { static int sonCount(int[] A, int n) { int flag = 0;// 递减为-1,相等0,递增为1,默认相等 int result = 1;// 默认为一个序列 for (int i = 1; i < n; i++) { // 如果后一个大于前一个,即递增 if (A[i] > A[i - 1]) { // 如果原来是相等,标志为递增 if (flag == 0) flag = 1; // 如果原来就是递减,增加一个子序列,标志恢复默认 else if (flag == -1) { result++; flag = 0; } //// 如果后一个小于前一个,即递减 } else if (A[i] < A[i - 1]) { // 如果原来是相等,标志为递减 if (flag == 0) flag = -1; // 如果原来是递增,增加一个子序列,标志恢复默认 else if (flag == 1) { result++; flag = 0; } } // 其他情况就是往下继续遍历 } return result; } public static void main(String[] args) { // 输入包括一个整数n(1 ≤ n ≤ 1,000,000,000) Scanner s = new Scanner(System.in); // 输入的第一行为一个正整数n(1 ≤ n ≤ 10^5) int n = s.nextInt(); // 第二行包括n个整数A_i(1 ≤ A_i ≤ 10^9),表示数组A的每个数字。 int[] A = new int ; for (int i = 0; i < n; i++) { A[i] = s.nextInt(); } System.out.println(sonCount(A, n)); } }
相关文章推荐
- [java实现]找一个数组的最大和的连续子数组(时间复杂度 O(n))
- 从n个数组中任意选取一个元素的所有组合的Java实现(组合问题)
- Java代码实现删除一个有序数组里面的重复元素
- JAVA采用数组结构实现一个线性表,可以增删改查,类似于ArrayList
- 两个数组求和为一个固定数值的所有组合java实现
- Java数组反射实现动态的判断一个对象书否是数组,并且对数组进行拆包输出 。。
- JAVA实现:给出洗牌的一个算法,并将洗好的牌存储在一个整形数组里
- 一个序列中有多少个子序列的两头是大于两端值的
- 用c++实现数组的下一个|上一个序列
- [java实现]找一个数组的最大和的连续子数组(时间复杂度 O(n))
- Java数组反射实现动态的判断一个对象书否是数组,并且对数组进行拆包输出 。。
- 输入一个正数 n,输出所有和为 n 连续正数序列。 java实现
- [java面试]逻辑推理6 10 18 32 下一个数?编程实现输入任意一个N位置,该数是多少?java实现
- 数组中有一个数字出现的次数超过了数组长度的一半,请找出这个数。java实现
- java实现原数组根据下标分隔成两个子数组并且在原数组中交换两个子数组的位置
- 编程:用java 语言实现,输入一个数,就相应地输出的几维数组!||用1、2、2、3、4、5这六个数字,用java写一个函数,打印出所有不同的排列,要求:"4"不能在第三位,"3"与"5"不能相连
- [java面试]逻辑推理6 10 18 32 下一个数?编程实现输入任意一个N位置,该数是多少?java实现
- Java 螺旋数组的实现方式-一个循环实现哦
- 一个数组:1,1,2,3,5,8,13,21...+m,求第30位数是多少?用递归实现;(常考!!!)
- 【Java】一个数组实现三个栈 (未完待续)