当前位置: 首页 > 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;}
      };

    相关文章:

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

    896. 单调数列 - 力扣&#xff08;LeetCode&#xff09; 题目 如果数组是单调递增或单调递减的&#xff0c;那么它是 单调 的。 如果对于所有 i < j&#xff0c;nums[i] < nums[j]&#xff0c;那么数组 nums 是单调递增的。 如果对于所有 i < j&#xff0c;nums[i]…...

    SDL2常用函数:SDL_BlitSurfaceSDL_UpdateWindowSurface 数据结构及使用介绍

    SDL_BlitSurface SDL_BlitSurface 是 SDL 1.2/2.0 中都存在的函数&#xff0c;用于将一个表面(Surface)的内容复制到另一个表面&#xff0c;支持部分复制、格式转换和简单的混合操作。 核心功能 表面复制&#xff1a;将源表面的像素数据复制到目标表面区域选择&#xff1a;可…...

    【LeetCode 热题 100】买卖股票的最佳时机 / 跳跃游戏 / 划分字母区间

    ⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;LeetCode 热题 100 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 买卖股票的最佳时机跳跃游戏跳跃游戏 II划分字母区间 买卖股票的最佳时机 买卖股票的最佳时机 class Solution { pu…...

    万亿参数背后的算力密码:大模型训练的分布式架构与自动化运维全解析

    目录 一、技术融合的时代背景 二、深度学习在 AI 大模型中的核心作用 2.1 预训练与微调机制 2.2 多模态深度学习的突破 三、分布式计算&#xff1a;大模型训练的基础设施 3.1 分布式训练核心原理 3.2 数据并行实战&#xff08;PyTorch DDP&#xff09; 3.3 模型并行与混…...

    LangChain03-图数据库与LangGraph

    图数据库与LangGraph集成实践 1. 引言 在构建智能问答系统、推荐引擎或复杂决策流程时&#xff0c;传统的关系型数据库和向量数据库往往难以满足对实体关系建模和多跳推理的需求。图数据库&#xff08;如 Neo4j、TigerGraph&#xff09;通过节点-边-属性的结构化表示&#xff…...

    rabbitmq单机多实例部署

    RabbitMQ 单实例部署 单实例部署是指在一台服务器上运行一个 RabbitMQ 实例。这种部署方式适用于小型应用或开发环境,配置简单,资源占用较少。单实例部署的核心是安装 RabbitMQ 并启动服务,通常需要配置 Erlang 环境,因为 RabbitMQ 是基于 Erlang 编写的。单实例部署的优势…...

    Linux10正式版发布,拥抱AI了!

    &#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验 Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯…...

    在离线 OpenEuler-22.03 服务器上升级 OpenSSH 的完整指南

    当然可以&#xff01;以下是一篇结构清晰、语言通俗易懂的技术博客草稿&#xff0c;供你参考和使用&#xff1a; 在离线 OpenEuler-22.03 服务器上升级 OpenSSH 的完整指南 背景介绍 最近在对一台内网的 OpenEuler-22.03 服务器进行安全扫描时&#xff0c;发现其 SSH 版本存在…...

    全能邮箱全能邮箱:实现邮件管理的自动化!

    全能邮箱全能邮箱&#xff1a;实现邮件管理的自动化&#xff01; 全能邮箱全能邮箱的配置教程&#xff1f;如何注册烽火域名邮箱&#xff1f; 全能邮箱全能邮箱作为一种创新的邮件管理解决方案&#xff0c;正逐渐改变我们处理邮件的方式。蜂邮EDM将围绕全能邮箱全能邮箱&…...

    [特殊字符] Linux 日志查看与分析常用命令全攻略

    在日常运维与开发排查中&#xff0c;我们经常需要查看服务日志来定位问题。本文系统整理了几种常用的日志查看命令&#xff0c;包括 tail、cat、grep、split、sed 等&#xff0c;并结合实际应用场景&#xff0c;提供了完整的使用方式和示例。 &#x1f4cc; 一、tail 命令 ——…...

    mysql-tpcc-mysql压测工具使用

    在Linux系统上安装和配置tpcc-mysql进行MySQL的TPC-C基准测试&#xff0c;通常涉及以下几个步骤。请注意&#xff0c;由于tpcc-mysql不是一个官方工具&#xff0c;它可能需要从第三方仓库获取&#xff0c;如Percona提供的版本。 前置条件 确保MySQL或MariaDB已安装&#xff1…...

    Qt找不到windows API报错:error: LNK2019: 无法解析的外部符号 __imp_OpenClipboard

    笔者在开发中出现的bug完整报错如下&#xff1a; spcm_ostools_win.obj:-1: error: LNK2019: 无法解析的外部符号 __imp_OpenClipboard&#xff0c;函数 "void __cdecl spcmdrv::vCopyToClipboard(char const *,unsigned __int64)" (?vCopyToClipboardspcmdrvYAXPE…...

    机试 | vector/array Minimum Glutton C++

    题目地址 &#xff1a; C - Minimum Glutton #include<stdio.h> #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() {//N:菜肴数&#xff0c;X&#xff1a;总甜度阈值&#xff0c;Y&#xff1a;总咸度阈值int…...

    OpenCv高阶(十七)——dlib库安装、dlib人脸检测

    文章目录 前言一、dlib库简介二、dlib库安装1、本地安装&#xff08;离线&#xff09;2、线上安装 三、dlib人脸检测原理1、HOG 特征提取2、 SVM 分类器训练3、 滑动窗口搜索4、非极大值抑制&#xff08;NMS&#xff09; 四、dlib人脸检测代码1、导入OpenCV计算机视觉库和dlib机…...

    前端内容黑白处理、轮播图、奇妙的头像特效

    1、内容黑白处理 &#xff08;1&#xff09;filter&#xff1a;滤镜 可以把包裹的区域中每一个像素点&#xff0c;经过固定的算法转换成另一种颜色来呈现 &#xff08;2&#xff09;grayscale&#xff1a;灰阶滤镜 取值范围&#xff1a;0~1取0&#xff1a;原图去1&#xff…...

    蓝桥杯 10. 安全序列

    当然可以&#xff0c;以下是整理后的 Markdown 格式题目描述&#xff1a; 题目描述 小蓝是工厂里的安全工程师&#xff0c;他负责安放工厂里的危险品。 工厂是一条直线&#xff0c;直线上有 n 个空位&#xff0c;小蓝需要将若干个油桶放置在这 n 个空位上。每 2 个油桶中间至…...

    (10)-java+ selenium->元素之By class name

    1.简介 继续介绍WebDriver关于元素定位大法,这篇介绍By ClassName。看到ID,NAME这些方法的讲解,应该知道,要做好Web自动化测试,最好是需要了解一些前端的基本知识。有了前端知识,做元素定位会很轻松,同样写网络爬虫也很有帮助 2.常用定位方法(8种) (1)id (2)nam…...

    Git - .gitignore 文件

    一、.gitignore 文件介绍 在使用 Git 进行版本控制时&#xff0c;.gitignore 文件是一个非常重要的配置文件&#xff0c;用于告诉 Git 哪些文件或目录不需要被追踪和提交到版本库中。合理使用 .gitignore 文件可以避免提交不必要的文件&#xff0c;如临时文件、编译生成的文件…...

    MPI与多线程(如OpenMP)混合编程注意事项与性能优化

    文章目录 MPI与多线程(如OpenMP)混合编程注意事项与性能优化混合编程注意事项性能优化策略示例代码编译与运行性能调优建议 MPI与多线程(如OpenMP)混合编程注意事项与性能优化 混合编程注意事项 MPI初始化与线程支持级别&#xff1a; 需要在MPI_Init之前调用MPI_Init_thread指…...

    计算机网络学习(八)——MAC

    一、MAC 在计算机网络中&#xff0c;MAC&#xff08;Media Access Control&#xff0c;媒体访问控制&#xff09;地址是数据链路层的重要概念&#xff0c;它用于唯一标识网络中的设备&#xff0c;并且在局域网&#xff08;如以太网&#xff09;中发挥关键作用。 MAC 是硬件地址…...

    英语六级-阅读篇

    目录 2023年12月大学英语真题&#xff08;二&#xff09; 十五选十&#xff08;Section A&#xff09; 单词表 短语表 译文 Passage Two&#xff08;Section C&#xff09; 单词表 短语表 译文 简介&#xff1a;其实我总结这篇文章就是平时记忆该阅读文章单词中出现的…...

    右键打开 pycharm 右键 pycharm

    文件夹右键打开pycharm aaa.reg notepad 右下角把文件格式改为&#xff1a;ansi Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\Directory\Background\shell\PyCharm] "Open with PyCharm" "Icon""\"D:\\soft\\PyCharm 2024.1.4\\bi…...

    机器人坐标系标定

    机器人坐标系标定 机器人坐标系标定 1. 知识目标 理解机器人坐标系的定义掌握机器人坐标系的分类 2. 技能目标 能够正确标定机器人坐标系 3. 机器人坐标系的作用 代表不同的物体或边界示例&#xff1a; 相对于桌子、弓箭、坯料、其他机器或边界移动 用途&#xff1a; 使用…...

    Flink流处理基础概论

    文章目录 引言Flink基本概述传统数据架构的不足Dataflow中的几大基本概念Dataflow流式处理宏观流程数据并行和任务并行的区别Flink中几种数据传播策略Flink中事件的延迟和吞吐事件延迟事件的吞吐如何更好的理解事件的延迟和吞吐flink数据流的几种操作输入输出转换操作滚动聚合窗…...

    【RabbitMQ】记录 InvalidDefinitionException: Java 8 date/time type

    目录 1. 添加必要依赖 2. 配置全局序列化方案&#xff08;推荐&#xff09; 3. 配置RabbitMQ消息转换器 关键点说明 1. 添加必要依赖 首先确保项目中包含JSR-310支持模块&#xff1a; <dependency><groupId>com.fasterxml.jackson.datatype</groupId>&l…...

    如何通过API接口实现自动化上货跨平台铺货?商品采集|商品上传实现详细步骤

    一、引言&#xff1a;跨平台铺货的技术挑战与 API 价值 在电商多平台运营时代&#xff0c;商家需要将商品同步上架至淘宝、京东、拼多多、亚马逊、Shopee 等多个平台&#xff0c;传统手动铺货模式存在效率低下&#xff08;单平台单商品上架需 30-60 分钟&#xff09;、数据一致…...

    《三维点如何映射到图像像素?——相机投影模型详解》

    引言 以三维投影介绍大多比较分散&#xff0c;不少小伙伴再面对诸多的坐标系转换中容易弄混&#xff0c;特别是再写代码的时候可能搞错&#xff0c;所有这篇文章帮大家完整的梳理3D视觉中的投影变换的全流程&#xff0c;一文弄清楚这个过程&#xff0c;帮助大家搞清坐标系转换…...

    Go 语言范围循环变量重用问题与 VSCode 调试解决方法

    文章目录 问题描述问题原因1. Go 1.21 及更早版本的范围循环行为2. Go 1.22 的改进3. VSCode 调试中的问题4. 命令行 dlv debug 的正确输出 三种解决方法1. 启用 Go 模块2. 优化 VSCode 调试配置3. 修改代码以确保兼容性4. 清理缓存5. 验证环境 验证结果结论 在 Go 编程中&…...

    青少年编程与数学 02-020 C#程序设计基础 04课题、常量和变量

    青少年编程与数学 02-020 C#程序设计基础 04课题、常量和变量 一、主函数1. 主函数的基本格式2. 主函数的参数3. 主函数的返回值4. 主函数的作用5. 主函数的示例6. 主函数的注意事项 二、变量1. 变量的声明示例 2. 变量的初始化声明时初始化声明后赋值 3. 变量的类型3.1 值类型…...

    零基础设计模式——结构型模式 - 适配器模式

    第三部分&#xff1a;结构型模式 - 适配器模式 (Adapter Pattern) 欢迎来到结构型模式的第一站&#xff01;结构型模式关注的是如何将类或对象组合成更大的结构&#xff0c;同时保持结构的灵活性和效率。适配器模式是其中非常实用的一个&#xff0c;它能帮助我们解决接口不兼容…...