数组单调递增中有突变的如何去除
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组单调递增中有突变的如何去除相关的知识,希望对你有一定的参考价值。
明显可以采用动态规划算法O(nlogn),具体做法去网上搜索“最长递增子序列”,有很多。 参考技术A 将所有后续元素前移一个位置,a[i] = a[i+1]; 参考技术B 什么叫“突变”?单调数列
题目描述
如果数组是单调递增或单调递减的,那么它是单调的。
如果对于所有 i <= j
,A[i] <= A[j]
,那么数组 A
是单调递增的。 如果对于所有 i <= j
,A[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 <= A.length <= 50000
-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;
}
}
以上是关于数组单调递增中有突变的如何去除的主要内容,如果未能解决你的问题,请参考以下文章