当前位置: 首页 > backend >正文

每日leetcode(昨天赶飞机没做,今天补)

896. 单调数列 - 力扣(LeetCode)

题目

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

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

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

    示例 1:

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

    示例 2:

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

    示例 3:

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

    提示:

    • 1 <= nums.length <= 105
    • -105 <= nums[i] <= 105

    思路

    1. 先找到有增减趋势的第一个相邻元素,然后记录其增减趋势,每次乘下一相邻元素的差值,只有相邻两对差值相反的时候相乘才会小于0,这个时候就返回false即可。
    2. 若遍历完没有被打断,即返回true。

    代码实现

    class Solution {
    public:bool isMonotonic(vector<int>& nums) {int n = nums.size(), i = 1;long long diff;if(n <= 2) return true;while(nums[i]-nums[i-1]==0) {++i;if(i == n) return true;}diff = nums[i]-nums[i-1];for(i = i+1; i < n; ++i) {if(diff * (nums[i] - nums[i-1]) < 0) return false;  }return true;}
    };

    复杂度分析

    • 时间复杂度:要分别访问每个元素两次——O(n)。
    • 空间复杂度:O(1)。

    题解与反思

    • 我的实现是非常丑陋的,没有考虑到数据溢出的问题,其实不应该相乘,因为结果可能会非常大,那么能接受的数据就不能非常大,这将会是非常有局限性的,所以最好的选择还是设计一个标记,再进行判断。
    • 另外,差值其实也可以不用计算,直接判断相邻两元素的大小关系即可,还能省一个变量。
    • class Solution {
      public:bool isMonotonic(vector<int>& nums) {int n = nums.size(), flag = 0, diff;if(n < 3) return true;for(int i = 1; i < n; ++i) {if(nums[i] == nums[i-1]) continue;if(nums[i] < nums[i-1]) {if(flag == 0) flag = -1;if(flag == 1) return false;}else {if(flag == 0) flag = 1;if(flag == -1) return false; }}return true;}
      };

    http://www.xdnf.cn/news/8592.html

    相关文章:

  1. 深入理解 Redis 哨兵模式
  2. H3C-W2000-G2【透明反代理】
  3. Nacos适配GaussDB超详细部署流程
  4. 【数据结构初阶】顺序表专题
  5. 在Rockchip平台上利用FFmpeg实现硬件解码与缩放并导出Python接口
  6. Selenium 测试框架 - Python
  7. SpringCloud实战:使用Sentinel构建可靠的微服务熔断机制
  8. 从 0 开始部署 Archivematica (windows环境)
  9. RabbitMQ 概述
  10. 【C/C++】多线程开发:wait、sleep、yield全解析
  11. 国标GB28181设备管理软件EasyGBS打造厨房全方位实时监控解决方案
  12. CC工具箱使用指南:【平行线两端闭合】
  13. kali的简化安装
  14. 水利水电安全员考试的案例分析题一般涉及哪些方面的知识?
  15. 精明的猎人VS精明的狐狸
  16. Python之os模块(文件和目录操作、进程管理、环境变量访问)
  17. Firebase 之 归因
  18. 跨域问题及其CORS解决方案:gin框架中配置跨域
  19. ch11 课堂参考代码 及 题目参考思路
  20. Spring Cloud实战:OpenFeign远程调用与服务治理
  21. Margin loss
  22. C语言数据结构-单链表
  23. 解锁内心的冲突:神经症冲突的理解与解决之道
  24. 半导体B2B分销中台有哪些应用场景
  25. 安装NBU软件及配置方法
  26. 谈谈对dubbo的广播机制的理解
  27. 促销活动期间,确保邮件不被标记为垃圾邮件
  28. 第六十六篇 探秘Java JVM内存模型:从城市基建到程序世界的精妙映射
  29. mysql8.4.3配置主从复制
  30. 鸿蒙进阶——Framework之Want 隐式匹配机制概述