各位题友大家好! 今天是 @负雪明烛 坚持日更的第 35 天。今天力扣上的每日一题是「896. 单调数列」。

解题思路

两次遍历

  • 遍历两次,分别判断是否为单调递增的数列、单调递减的数列。
  1. class Solution:
  2. def isMonotonic(self, A):
  3. return self.isIncreasing(A) or self.isDecreasing(A)
  4. def isIncreasing(self, A):
  5. N = len(A)
  6. for i in range(N - 1):
  7. if A[i + 1] - A[i] < 0:
  8. return False
  9. return True
  10. def isDecreasing(self, A):
  11. N = len(A)
  12. for i in range(N - 1):
  13. if A[i + 1] - A[i] > 0:
  14. return False
  15. return True
  • 时间复杂度:
  • 空间复杂度:

一次遍历

也可以遍历一次:

  • 使用 inc 标记数组是否单调上升的,如果有下降,则将其置为 false;
    - 使用 dec 标记数组是否单调递减的,如果有上升,则将其置为 false。

那么:

  • 如果数组是单调的,那么 inc 和 dec 会至少有一个一直保持 true。
    - 如果 inc 和 dec 同时为 false,说明数列中既有递增的情况,也有递减的情况,所以数列就不是单调的。
  1. class Solution:
  2. def isMonotonic(self, A):
  3. N = len(A)
  4. inc, dec = True, True
  5. for i in range(1, N):
  6. if A[i] < A[i - 1]:
  7. inc = False
  8. if A[i] > A[i - 1]:
  9. dec = False
  10. if not inc and not dec:
  11. return False
  12. return True

刷题心得

周末终于给了个 Easy 题,不用再花两三个小时写题解了。周末愉快!


OK,以上就是 @负雪明烛 写的今天题解的全部内容了,如果你觉得有帮助的话,求赞、求关注、求收藏。如果有疑问的话,请在下面评论,我会及时解答。

关注我,你将不会错过我的精彩动画题解、面试题分享、组队刷题活动,进入主页 @负雪明烛 右侧有刷题组织,从此刷题不再孤单。

欢迎关注我的公众号:[每日算法题](https://img-blog.csdnimg.cn/20210220185516778.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Z1eHVlbWluZ3podQ==,size_16,color_FFFFFF,t_70)

祝大家牛年大吉!AC 多多,Offer 多多!我们明天再见!