题解 | #排序子序列#
排序子序列
http://www.nowcoder.com/questionTerminal/2d3f6ddd82da445d804c95db22dcc471
-
数组中会有3种状态,arr[ i ] > arr[ i + 1 ], arr[ i ] = arr[ i + 1 ], arr[ i ] < arr[ i + 1 ]
-
因为一组会有多个数据,所以 在 if 内套一个循环 循环结束表示 划分了一个子序列, i ++ ,count++;
-
因为出现i + 1 会有数组越界问题,创建一个n+1的数组大小。
import java.util.*; public class Main{ public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextInt()) { int n = in.nextInt(); int[] arr = new int[n + 1]; //数组大小为n+1是为了防止下面数组越界。 for (int i = 0; i < n; i++) { //判断条件不能是arr.length; arr[i] = in.nextInt(); } int i = 0; int count = 0; while (i < n) { if (arr[i] < arr[i + 1]) { //表示该子序列非递增 while (i < n && arr[i] < arr[i + 1]) { //判断下一个数字是否可以划分到这个子序列 i++; } count++; //表示该序列完毕,用count记录当前有几个子序列 i++; } else if (arr[i] == arr[i + 1]) { //相等i+1跳过。 i++; } else { //非递减序列 while (i < n && arr[i] > arr[i + 1]) { i++; } count++; i++; } } System.out.println(count); } } }