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

每日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.lryc.cn/news/2386974.html

    相关文章:

  1. SDL2常用函数:SDL_BlitSurfaceSDL_UpdateWindowSurface 数据结构及使用介绍
  2. 【LeetCode 热题 100】买卖股票的最佳时机 / 跳跃游戏 / 划分字母区间
  3. 万亿参数背后的算力密码:大模型训练的分布式架构与自动化运维全解析
  4. LangChain03-图数据库与LangGraph
  5. rabbitmq单机多实例部署
  6. Linux10正式版发布,拥抱AI了!
  7. 在离线 OpenEuler-22.03 服务器上升级 OpenSSH 的完整指南
  8. 全能邮箱全能邮箱:实现邮件管理的自动化!
  9. [特殊字符] Linux 日志查看与分析常用命令全攻略
  10. mysql-tpcc-mysql压测工具使用
  11. Qt找不到windows API报错:error: LNK2019: 无法解析的外部符号 __imp_OpenClipboard
  12. 机试 | vector/array Minimum Glutton C++
  13. OpenCv高阶(十七)——dlib库安装、dlib人脸检测
  14. 前端内容黑白处理、轮播图、奇妙的头像特效
  15. 蓝桥杯 10. 安全序列
  16. (10)-java+ selenium->元素之By class name
  17. Git - .gitignore 文件
  18. MPI与多线程(如OpenMP)混合编程注意事项与性能优化
  19. 计算机网络学习(八)——MAC
  20. 英语六级-阅读篇
  21. 右键打开 pycharm 右键 pycharm
  22. 机器人坐标系标定
  23. Flink流处理基础概论
  24. 【RabbitMQ】记录 InvalidDefinitionException: Java 8 date/time type
  25. 如何通过API接口实现自动化上货跨平台铺货?商品采集|商品上传实现详细步骤
  26. 《三维点如何映射到图像像素?——相机投影模型详解》
  27. Go 语言范围循环变量重用问题与 VSCode 调试解决方法
  28. 青少年编程与数学 02-020 C#程序设计基础 04课题、常量和变量
  29. 零基础设计模式——结构型模式 - 适配器模式
  30. 【QT】TXT文件的基础操作