题解 | #排序子序列#

排序子序列

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);
        }
    }
}

全部评论

相关推荐

Hello_WordN:咱就是说,除了生命其他都是小事,希望面试官平安,希望各位平时也多注意安全
点赞 评论 收藏
分享
牛客868257804号:九个中铁八个中建
点赞 评论 收藏
分享
评论
2
1
分享
牛客网
牛客企业服务