LeetCode每日一题,738. Monotonic Array
先看题目描述
大意就是给定一个数列 A,让我们判断其是否是单调数列
算法和思路
两次遍历
先遍历一次 A数组构造出差分数组 diff,再遍历 diff 数组找出 diff 数组中元素的最大值和最小值,判断其最大值和最小值是否同号即可
一次遍历
遍历一次 A 数组,若 A 数组中既出现 A[i] > A[i - 1] 的元素又出现 A[i] < A[i - 1] 的元素,那么一定不是单调数列,则返回 false,否则返回 true
算法源码
两次遍历
1 | class Solution { |
一次遍历
1 | class Solution { |
下面是看运行效率比较优秀的代码看到的方法,大致思路就是比较 A 数组中的第一个元素 A[0] 和最后一个元素 A[len - 1],若 A[0] < A[len - 1],那么若 A 是个单调数列,则其一定是个单调递增数列,不能出现 A[i] < A[i - 1] 的元素;若 A[0] > A[len - 1],那么若 A 是个单调数列,则其一定是个单调递减数列,不能出现 A[i] > A[i - 1] 的元素;若 A[0] 与 A[len - 1] 相等,那么若 A 是个单调数列,则其中所有元素必定相等,不能出现不相等的元素
1 | class Solution { |