排序子序列
做题思路
根据题意的非递增序列和非递减序列,可以分为这两个序列
题目给的例子也代表了所有的情况
①arr[i] > arr[i+1]
②arr[i] < arr[i+1]
③arr[i] = arr[i+1]
但有一个情况需要注意:
当 i 遍历到结尾时,i+1越界了
这时我们可以在new数组的时候,给数组长度+1,就完美的解决了这个问题
代码实现
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int[] arr=new int[n+1];
for(int i=0;i<n;i++){
arr[i]=scanner.nextInt();
}
int i=0;
int count=0;
while(i<n){
//三种情况
//①arr[i]比下一个小(非递减序列)
if(arr[i]<arr[i+1]){
while(i<n && arr[i]<arr[i+1]){
i++;
}
//一个序列遍历完了
count++;
//去下一个序列
i++;
//②arr[i]等于下一个
}else if(arr[i]==arr[i+1]){
i++;
//③arr[i]比下一个大(非递增序列)
}else{
while(i<n&&arr[i]>arr[i+1]){
i++;
}
count++;
i++;
}
}
System.out.println(count);
}
}
😄