数组单调递增中有突变的如何去除

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组单调递增中有突变的如何去除相关的知识,希望对你有一定的参考价值。

明显可以采用动态规划算法O(nlogn),具体做法去网上搜索“最长递增子序列”,有很多。 参考技术A 将所有后续元素前移一个位置,a[i] = a[i+1]; 参考技术B 什么叫“突变”?

单调数列

题目描述

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

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

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

示例 1:

输入:[1,2,2,3]
输出:true

示例 2:

输入:[6,5,4,4]
输出:true

示例 3:

输入:[1,3,2]
输出:false

示例 4:

输入:[1,2,4,5]
输出:true

示例 5:

输入:[1,1,1]
输出:true

提示:

  1. 1 <= A.length <= 50000
  2. -100000 <= A[i] <= 100000

分析

按照递增和递减分别写两个函数,放到目标函数中做判断。

贴出代码

class Solution {
    public boolean isMonotonic(int[] A) {
         if(upMonotonic(A)||downMontonic(A))
            return true;
        else if(A.length == 1)
            return true;
        else return false;
    }
    public boolean upMonotonic(int[] A){
        int a,b;
        boolean t = false;
        for(int i = 1; i < A.length; i++){
            a = A[i - 1];
            b = A[i];
            if(a <= b)
                t =true;
            else{
                t = false;
                break;
            }
        }
        return t;
    }

    public boolean downMontonic(int[] A){
        int a,b;
        boolean t = false;
        for(int i = 1; i < A.length; i++){
            a = A[i - 1];
            b = A[i];
            if(a >= b)
                t =true;
            else{
                t = false;
                break;
            }
        }
        return t;
    }
}

以上是关于数组单调递增中有突变的如何去除的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 0316. 去除重复字母:单调栈

关于iOS去除数组中重复数据的几种方法

去除重复的数据

关于如何去除数组中重复项

链表 | 去除递增有序单链表中的重复元素

js数组中如何去除重复值?