272、单调数列

本文详细探讨了单调数列的概念,分析了其在算法中的应用,通过实例解析如何利用Java实现单调栈处理单调数列问题,包括如何判断单调性以及优化算法效率。对于程序员来说,掌握这一技巧能有效提升算法解决实际问题的能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果数组是单调递增或单调递减的,那么它是 单调 的。

如果对于所有 i <= j,nums[i] <= nums[j],那么数组 nums 是单调递增的。 如果对于所有 i <= j,nums[i]> = nums[j],那么数组 nums 是单调递减的。

当给定的数组 nums 是单调数组时返回 true,否则返回 false

  

示例 1

输入:nums = [1,2,2,3]

输出:true

示例 2

输入:nums = [6,5,4,4]

输出:true

示例 3

输入:nums = [1,3,2]

输出:false

  

提示:

1 <= nums.length <= 105

-105 <= nums[i] <= 105

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/monotonic-array

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

package cn.fansunion.leecode.array.max;

/**

 * 896. 单调数列 <br/>

 * 如果数组是单调递增或单调递减的,那么它是 单调 的。 <br/>

 *

 * 如果对于所有 i <= j,nums[i] <= nums[j],那么数组 nums 是单调递增的。 <br/>

 * 如果对于所有 i <= j,nums[i] >= nums[j],那么数组 nums 是单调递减的。 <br/>

 *

 * 当给定的数组 nums 是单调数组时返回 true,否则返回 false。 <br/>

 *

 * 来源:力扣(LeetCode) 链接:力扣 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 *

 * @author wen.lei@brgroup.com

 *

 *         2022-3-9

 */

public class MonotonicArray {

    /*    示例 1:

     

    输入:nums = [1,2,2,3]

    输出:true

    示例 2:

     

    输入:nums = [6,5,4,4]

    输出:true

    示例 3:

     

    输入:nums = [1,3,2]

    输出:false*/

    public boolean isMonotonic(int[] nums) {

        return isAsc(nums) || isDesc(nums);

    }

    // 是否降序

    private boolean isDesc(int[] nums) {

        int prev = Integer.MAX_VALUE;

        // 降序时,当前的 不应该比 前面的大

        for (int cur : nums) {

            if (cur > prev) {

                return false;

            }

            prev = cur;

        }

        return true;

    }

    // 是否升序

    private boolean isAsc(int[] nums) {

        int prev = Integer.MIN_VALUE;

        // 升序时,当前的 不应该比 前面的小

        for (int cur : nums) {

            if (cur < prev) {

                return false;

            }

            prev = cur;

        }

        return true;

    }

}

package test.leecode.array;

import org.junit.Assert;

import org.junit.Test;

import cn.fansunion.leecode.array.max.MonotonicArray;

/**

 * @author wen.lei@brgroup.com

 *

 *         2022-2-25

 */

public class MonotonicArrayTest {

    @Test

    public void test() {

        MonotonicArray test = new MonotonicArray();

        Assert.assertTrue(test.isMonotonic(new int[] {1234}));

        Assert.assertTrue(test.isMonotonic(new int[] {134}));

        Assert.assertTrue(test.isMonotonic(new int[] {100}));

        Assert.assertTrue(test.isMonotonic(new int[] {9881}));

        Assert.assertFalse(test.isMonotonic(new int[] {1324}));

        Assert.assertFalse(test.isMonotonic(new int[] {141}));

        Assert.assertFalse(test.isMonotonic(new int[] {101}));

        Assert.assertFalse(test.isMonotonic(new int[] {10, -1,-2,-1}));

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值