2023-11-16 LeetCode每日一题(最长奇偶子数组)

2023-11-16每日一题

一、题目编号

2760. 最长奇偶子数组	

二、题目链接

点击跳转到题目位置

三、题目描述

给你一个下标从 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:
在这里插入图片描述

示例 2:
2023-11-16 LeetCode每日一题(最长奇偶子数组)_第1张图片
示例 3:
2023-11-16 LeetCode每日一题(最长奇偶子数组)_第2张图片
提示:

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

四、解题代码

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

五、解题思路

(1) 采用滑动窗口解决,left满足条件,right控制移动,不满足条件后新的left更新成为right即可,且原来符合要求的窗口长度为right - left。

你可能感兴趣的:(LeetCode每日一题,leetcode,算法,数据结构)