这是悦乐书的第345次更新,第369篇原创
java
今天介绍的是LeetCode算法题中Easy级别的第210题(顺位题号是896)。若是数组单调递增或单调递减,则数组是单调的。若是对于全部i <= j,A[i] <= A[j],则数组A是单调递增的。若是对于全部i <= j,A[i] >= A[j],则数组A是单调递减的。当且仅当给定的数组A是单调的时,才返回true。例如:算法
输入:[1,2,2,3]
输出:true数组
输入:[6,5,4,4]
输出:true数据结构
输入:[1,3,2]
输出:falsecode
输入:[1,2,4,5]
输出:trueclass
输入:[1,1,1]
输出:true变量
注意:数据结构与算法
1 <= A.length <= 50000循环
-100000 <= A [i] <= 100000
方法
使用两个循环,一个判断是否递增,一个判断是否递减,只要其中一个符合条件便可返回true。
public boolean isMonotonic(int[] A) { return isIncrease(A) || isDecrease(A); } public boolean isIncrease(int[] A) { for (int i=0; i<A.length-1; i++) { if (A[i] > A[i+1]) { return false; } } return true; } public boolean isDecrease(int[] A) { for (int i=0; i<A.length-1; i++) { if (A[i] < A[i+1]) { return false; } } return true; }
也能够只是用一次循环。
public boolean isMonotonic2(int[] A) { boolean isincrease = true; boolean isdecrease = true; int n = A.length; for (int i=0; i<n-1; i++) { isincrease = isincrease && A[i] <= A[i+1]; isdecrease = isdecrease && A[i] >= A[i+1]; } return isincrease || isdecrease; }
针对第二种解法,咱们分两种状况分别处理了isincrease、isdecrease两个变量。
public boolean isMonotonic3(int[] A) { boolean isincrease = true; boolean isdecrease = true; int n = A.length; for (int i=0; i<n-1; i++) { if (A[i] < A[i+1]) { isdecrease = false; } if (A[i] > A[i+1]) { isincrease = false; } } return isincrease || isdecrease; }
也能够借助包装类Integer
的compare
方法,比较相邻两个元素的大小,另外使用一个变量存储上一次比较的结果,每次作完新的比较后,用新的结果和前一次的结果比较,只要先后两次比较结果不一样,能够直接返回false。
public boolean isMonotonic4(int[] A) { int flag = 0, n = A.length; for (int i=0; i<n-1; i++) { int num = Integer.compare(A[i], A[i+1]); if (num != 0) { if (flag != 0 && flag != num) { return false; } flag = num; } } return true; }
算法专题目前已连续日更超过六个月,算法题文章213+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是所有内容,若是你们有什么好的解法思路、建议或者其余问题,能够下方留言交流,点赞、留言、转发就是对我最大的回报和支持!