​LeetCode解法汇总2760. 最长奇偶子数组

news/2024/7/3 1:38:58

 目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台


描述:

给你一个下标从 0 开始的整数数组 nums 和一个整数 threshold 。

请你从 nums 的子数组中找出以下标 l 开头、下标 r 结尾 (0 <= l <= r < nums.length) 且满足以下条件的 最长子数组 :

  • nums[l] % 2 == 0
  • 对于范围 [l, r - 1] 内的所有下标 i ,nums[i] % 2 != nums[i + 1] % 2
  • 对于范围 [l, r] 内的所有下标 i ,nums[i] <= threshold

以整数形式返回满足题目要求的最长子数组的长度。

注意:子数组 是数组中的一个连续非空元素序列。

示例 1:

输入:nums = [3,2,5,4], threshold = 5
输出:3
解释:在这个示例中,我们选择从 l = 1 开始、到 r = 3 结束的子数组 => [2,5,4] ,满足上述条件。
因此,答案就是这个子数组的长度 3 。可以证明 3 是满足题目要求的最大长度。

示例 2:

输入:nums = [1,2], threshold = 2
输出:1
解释:
在这个示例中,我们选择从 l = 1 开始、到 r = 1 结束的子数组 => [2] 。
该子数组满足上述全部条件。可以证明 1 是满足题目要求的最大长度。

示例 3:

输入:nums = [2,3,4,5], threshold = 4
输出:3
解释:
在这个示例中,我们选择从 l = 0 开始、到 r = 2 结束的子数组 => [2,3,4] 。 
该子数组满足上述全部条件。
因此,答案就是这个子数组的长度 3 。可以证明 3 是满足题目要求的最大长度。

提示:

  • 1 <= nums.length <= 100
  • 1 <= nums[i] <= 100
  • 1 <= threshold <= 100

解题思路:

这题虽然是简单题,但是如果想使用O(n)的是时间复杂度来解决,其实并没有的简单。

这题求符合条件的数组的最大长度,那么很自然的就可以联想到滑动区间,设置left和right来确定一个区间,这个区间是就是符合的。

首先移动left,如果起点不符合要求,则往后移动;

如果起点符合要求,则移动right,看这个区间可以多大范围。

移动right的过程中,如果nums[right] > threshold不符合,则更新left和right的位置。

如果nums[right - 1] % 2 == nums[right] % 2,则也更新left和right,和上面不通的时候,此时当前位置,left还是可以使用当前位置的,但是right需要+1。

代码:

class Solution {
public:
    int longestAlternatingSubarray(vector<int> &nums, int threshold)
    {
        int maxLength = 0;
        int left = 0;
        int right = 0;
        while (left < nums.size() && right < nums.size())
        {
            if (nums[left] % 2 != 0)
            {
                left++;
                continue;
            }
            if (right < left)
            {
                right = left;
            }
            while (right < nums.size())
            {
                if (nums[right] > threshold)
                {
                    left = ++right;
                    break;
                }
                if (left < right && (nums[right - 1] % 2 == nums[right] % 2))
                {
                    left = right;
                    right++;
                    break;
                }
                right++;
                maxLength = max(right - left, maxLength);
            }
        }
        return maxLength;
    }
};


http://lihuaxi.xjx100.cn/news/1803879.html

相关文章

2023.11.18 每日一题(AI自生成应用)【C++】【Python】【Java】【Go】 动态路径分析

目录 一、编程挑战&#xff1a;动态时间序列分析 实际应用&#xff1a; 实现提示&#xff1a; 二、实现 1. C 2. Python 3. JAVA 4. Go 一、编程挑战&#xff1a;动态时间序列分析 问题描述&#xff1a; 假设你是一名软件工程师&#xff0c;需要开发一个应用来分析和预…

使用Python调用API接口获取京东关键词详情数据

在电商领域&#xff0c;获取关键词的详情数据对于产品分析、市场研究等方面具有重要意义。京东作为中国最大的电商平台之一&#xff0c;提供了丰富的API接口供开发者使用。本文将详细介绍如何使用Python调用京东的API接口获取关键词详情数据&#xff0c;并给出相应的代码实现。…

早晨暖心的早安问候语,祝好心情从清晨开始,愿你享受美好生活每一天!

1、冬天里&#xff0c;重调理&#xff1b;多锻炼&#xff0c;日光浴&#xff1b;早安睡&#xff0c;晚游历&#xff1b;勤开窗&#xff0c;通空气&#xff1b;暖腹背&#xff0c;寒不欺&#xff1b;适滋补&#xff0c;强体力&#xff1b;心乐观&#xff0c;无忧虑&#xff1b;温…

【SAP-QUERY】QUERY报表的创建

SQ03&#xff1a;创建用户组 环境-》查询区域-》选择标准区域 创建用户组和用户组描述 可选分配权限&#xff08;授权当前用户组下人员可以修改该query报表&#xff09; SQ02&#xff1a;创建信息集 确认区域是否为标准区域 选择创建的用户组 创建信息集&#xff1a;输入描述&a…

刷题学习记录(攻防世界)

wife_wife 一拿到题目就提示这题不用爆破 进入环境得到的是一个登录框 随便试了一下登录账户密码会提示错误&#xff0c;那就去注册账户&#xff0c;注册的账户还有注册管理员的选项 先注册普通用户234&#xff0c;注册好后登录 这样就得到flag&#xff0c;但是提交是错误的&a…

JSON 格式的接口测试流程【Eolink Apikit】

在进行JSON格式的接口测试时&#xff0c;需要使用工具发送HTTP请求并获取响应。测试工具可以是单独的测试框架&#xff0c;如 Eolink Apikit。测试人员需要根据接口文档和测试用例编写测试脚本&#xff0c;然后运行测试并分析结果&#xff0c;以确保接口的质量和稳定性。 当我…

Google Play上架马甲包攻略

想要更好的海外推广离开google play应用市场&#xff0c;有了谷歌就可以按各平台规则来进行推广&#xff0c;做广告投放基本都离不开谷歌市场的包&#xff0c;所以有了马甲包。然而&#xff0c;Google Play对于马甲包的上传有一系列限制和规定。以下是一些Google Play上架马甲包…

milvus数据库分区管理

一、创建分区 在创建集合时&#xff0c;会默认创建分区_default。 自己手动创建如下&#xff1a; from pymilvus import Collection collection Collection("book") # Get an existing collection. collection.create_partition("novel")二、检测分…