Java排序子序列

这篇博客讨论了一道编程题目,涉及对非递增和非递减序列的处理。博主分享了如何通过遍历数组并处理三种不同情况(元素小于、等于或大于下一个元素)来找到排序子序列的数量。在代码实现中,使用了Java进行动态遍历和计数,并特别注意了边界条件的处理。
摘要由CSDN通过智能技术生成

排序子序列

排序子序列题目连接
在这里插入图片描述

做题思路

根据题意的非递增序列和非递减序列,可以分为这两个序列
在这里插入图片描述

题目给的例子也代表了所有的情况

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

在这里插入图片描述
😄

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值