【每日一题】最长奇偶子数组

文章目录

  • Tag
  • 题目来源
  • 解题思路
    • 方法一:枚举
    • 方法二:一次遍历
  • 其他语言
    • python3
  • 写在最后

Tag

【一次遍历】【枚举】【数组】【2023-11-16】


题目来源

2760. 最长奇偶子数组


解题思路

方法一:枚举

本题有多种方法可以解决,最朴素的方法就是枚举所有的子数组,对枚举的所有子数组逐一判断是否是符合要求的奇偶数组,统计最大的奇偶数组长度即可。

该方法属于基础语法范畴,不再进行详细分析,具体请见代码。

实现代码

class Solution {
public:
    bool isValid(vector<int>& nums, int l , int r, int threshold) {
        if (nums[l] % 2 != 0) {
            return false;
        }
        for (int i = l; i <= r; ++i) {
            if (nums[i] > threshold || (i + 1 <= r && nums[i] % 2 == nums[i+1] % 2)) {
                return false;
            }
        }
        return true;
    }

    int longestAlternatingSubarray(vector<int>& nums, int threshold) {
        int n = nums.size();
        int res = 0;
        for (int l = 0; l < n; ++l) {
            for (int r = l; r < n; ++r) {
                if (isValid(nums, l, r, threshold)) {
                    res = max(res, r - l + 1);
                }
            }
        }
        return res;
    }
};

复杂度分析

时间复杂度: O ( n 3 ) O(n^3) O(n3) n n n 是数组 nums 的长度。

空间复杂度: O ( 1 ) O(1) O(1)

方法二:一次遍历

本方法参考 教你一次性把代码写对!O(n) 分组循环(Python/Java/C++/Go/JS/Rust)。

我们可以先找到有效的开始位置 i,再从有效的开始位置向后找最长的有效子数组的长度,该方法的时间复杂度为 O ( n ) O(n) O(n),因为 i 是一直增加的,不会重置也不会减少。

实现代码

class Solution {
public:
    int longestAlternatingSubarray(vector<int>& nums, int threshold) {
        int n = nums.size(), res = 0;
        int i = 0;

        while (i < n) {
            if (nums[i] > threshold || nums[i] % 2) {
                ++i;
                continue;
            }
            int start = i;  // 子数组的开始
            ++i;            // 子数组开始位置已经满足,从下一个位置开始判断
            while (i < n && nums[i] <= threshold && nums[i] % 2 != nums[i-1] % 2) {
                ++i;
            }
            // 从 start 到 i-1 是符合条件的子数组
            res = max(res, i - start);
        }
        return res;
    }
};

以上代码,建议记住,尤其是用 if 来找符合子数组起点,一定会有读者想用 while 来实现,读者可以尝试一下,会遇到很多错误的,如果你最后将 while 语句调试通过了,欢迎评论区沟通交流,你很厉害!

记住的代码可以作为一个模板使用,用来解决 “数组会被分割成若干组,且每一组的判断/处理逻辑是一样的” 这一类问题。

复杂度分析

时间复杂度: O ( n ) O(n) O(n)

空间复杂度: O ( 1 ) O(1) O(1)


其他语言

python3

class Solution:
    def longestAlternatingSubarray(self, nums: List[int], threshold: int) -> int:
        n = len(nums)
        res, i = 0, 0
        while i < n:
            if nums[i] > threshold or nums[i] % 2:
                i += 1
                continue
            
            start = i
            i += 1
            while i < n and nums[i] <= threshold and nums[i] % 2 != nums[i-1] % 2:
                i += 1
            res = max(res, i - start)
        return res

写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/152909.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何有效防止公司内部的信息泄露?

信息泄露对公司可能带来严重影响&#xff0c;因此采取一系列措施以确保信息安全至关重要。以下是一些建议&#xff1a; 部署综合的防泄密软件&#xff1a; 在公司内部&#xff0c;使用专业的防泄密软件如华企盾DSC系统&#xff0c;涵盖文件加密、U盘管控、桌面行为管理、日志审…

极智AI | Realtime Multi-Person人体姿态估计之OpenPose

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文来介绍一下 Realtime Multi-Person人体姿态估计之OpenPose。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:https://t.zsxq.com/0aiNxERDq OpenPose 主要是…

qt使用AES加密、解密字符串

一、AES算法 AES (Advanced Encryption Standard) 是一种对称加密算法&#xff0c;是目前被广泛使用的数据加密标准之一。该算法旨在取代DES (Data Encryption Standard) 算法。AES最初由比利时密码学家 Joan Daemen 和 Vincent Rijmen 提出&#xff0c;经过多年的演化、改进和…

TSINGSEE青犀智慧机房AI+视频智能监管方案,保障机房设备稳定运转

一、背景与需求分析 随着互联网的高速发展&#xff0c;机房数量及配套环境设备日益增多&#xff0c;其运行状况直接决定着企业组织的运营效率和服务质量。作为企业信息化的核心&#xff0c;机房的安全监测与管理&#xff0c;不仅关系到企业的稳定运转&#xff0c;同时也关系到…

jffs2文件系统(二)

本篇文章讲解一下如何制作jffs2文件系统&#xff0c;以及如何在linux下把jffs2作为根文件系统使用。 文件系统制作 制作工具&#xff1a;mtd_utils&#xff0c;可以自己安装 mkfs.jffs2 -o root-uclibc-jffs2 -r root-uclibc -e 0x10000 -s 0x1000 -n -l -X zlib --pad0x10000…

(珍藏版)Redis经典面试题32道,吊打面试官!

文章目录 Redis最新2023年面试题高级面试题及附答案解析(3)01、请用 Redis 和任意语言实现一段恶意登录保护的代码&#xff1f;02、Pipeline 有什么好处&#xff0c;为什么要用 pipeline&#xff1f;03、Redis 常用管理命令有哪些&#xff1f;04、Redis 持久化数据和缓存怎么做…

避坑指南!!在树莓派4b上安装Pycharm以及无法使用终端的问题解决!!

一、下载Pycharm–linux安装包 这里是踩的第一个坑&#xff0c;一开始我下载的是pycharm2023-linux版本的。后面发现缺少很多东西&#xff0c;安装不成功。后面下载了低版本的Pycharm才可以。我下载的是2020版本的。注意&#xff1a;在下载安装包时&#xff0c;一定要在window…

ECRS工时分析软件:全面提升生产效率和产能管理的利器

在当今高度竞争的商业环境中&#xff0c;企业需要不断提升生产效率和产能管理以保持竞争优势。ECRS工时分析软件作为一款专业的工具&#xff0c;通过自动导出各种表格和图表&#xff0c;全面涵盖了生产过程中的各种分析和改善活动&#xff0c;为企业提供了提升生产效率和产能管…

思维导图软件 Xmind mac中文版特点介绍

XMind 2022 mac是一款思维导图软件&#xff0c;可以帮助用户创建各种类型的思维导图和概念图。 XMind mac软件特点 - 多样化的导图类型&#xff1a;XMind提供了多种类型的导图&#xff0c;如鱼骨图、树形图、机构图等&#xff0c;可以满足不同用户的需求。 - 强大的功能和工具&…

基于单片机的自动变速箱电控系统

**单片机设计介绍&#xff0c; 基于单片机的自动变速箱电控系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的自动变速箱电控系统是一种通过单片机来控制车辆自动变速箱的系统。它借助传感器和单片机的协同工作&am…

MATLAB 模糊设计器 构建 模糊系统

系列文章目录 文章目录 系列文章目录前言一、创建 FIS 结构二、定义输入变量三、定义输出变量四、定义成员函数五、定义规则库六、设计分析七、存储和修改设计八、导出 FIS总结 前言 本例演示如何使用 Fuzzy Logic Designer 应用程序交互式创建 1 型 Mamdani 模糊推理系统&…

知乎怎么快速涨粉?15个实用方法让你迅速积累粉丝

**一、自我介绍** 大家好&#xff0c;我是知乎上的一个普通用户&#xff0c;我在这篇文章中将会分享一些关于如何涨粉的最实用的方法。我相信&#xff0c;只要你们按照这些方法去做&#xff0c;你们也会像我一样&#xff0c;迅速积累起大量的粉丝。 **二、方法分享** **1. 优…

VB.net WebBrowser网页元素抓取分析方法

在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…

文件包含_常见文件包含情况

文件包含系列 相关函数 分类 实践 包含实现的场景

亲测:你这些网站都不知道,哪来时间去摸鱼?

一些我常用且好用的在线工具 Postcat - 在线API 开发测试工具 postcat.com/ API 开发测试工具 Postcat 是一个强大的开源、免费的、跨平台&#xff08;Windows、Mac、Linux、Browsers...&#xff09;的 API 开发测试工具&#xff0c;支持 REST、Websocket 等协议&#xff08…

美联储暂停加息 黄金代理要“笑嘻嘻”?

在11月的议息会议上&#xff0c;美联储再次宣布暂停加息。这是继九月份以后&#xff0c;美联储再次做同样的决定&#xff0c;目前已经实现了2连停。停止加息意味着美元资产的吸引度下降&#xff0c;美元指数将会受压&#xff0c;现货黄金价格因为美元的走弱可能上涨&#xff0c…

前端安全策略保障

文章目录 前言后台管理系统网络安全XSSCSRFSQL注入 后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;前端系列文章 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出…

Ubuntu 安装VMware Tools选项显示灰色,如何安装VMware Tools

只要你的网络没问题&#xff0c;你直接执行这几个命令&#xff0c;重启ubuntu虚拟机即可、 sudo dpkg --configure -a sudo apt-get autoremove open-vm-tools sudo apt-get install open-vm-tools sudo apt-get install open-vm-tools-desktop

SpringJDBC模板类JdbcTemplate

Spring JdbcTemplate使用JdbcTemplate完成增删改查环境准备新增修改删除查询一个对象批量添加批量修改和批量删除使用德鲁伊连接池&#xff08;之前数据源是用我们自己写的&#xff09; JdbcTemplate JdbcTemplate是Spring提供的一个JDBC模板类&#xff0c;是对JDBC的封装&…

文本格式清理工具 TextSoap mac中文版软件特色

TextSoap mac是一款文本格式清理工具。TextSoap可以帮助用户清除掉text文档内的文字格式&#xff0c;还可以将文档内的url转换成超链接&#xff0c;简单方便&#xff0c;是你日常办公不可缺少的工具。 TextSoap for mac软件特色 1、清洁界面 2、集成文本编辑器 3、100多个内…
最新文章