解决leetcode第3721题最长平衡子数组II

3721.最长平衡子数组II

难度:困难

问题描述:

给你一个整数数组nums。

如果子数组中不同偶数的数量等于不同奇数的数量,则称该子数组是平衡的。

返回最长平衡子数组的长度。

子数组是数组中连续且非空的一段元素序列。

示例1:

输入:nums=[2,5,4,3]

输出:4

解释:

最长平衡子数组是[2,5,4,3]。

它有2个不同的偶数[2,4]和2个不同的奇数[5,3]。因此,答案是4。

示例2:

输入:nums=[3,2,2,5,4]

输出:5

解释:

最长平衡子数组是[3,2,2,5,4]。

它有2个不同的偶数[2,4]和2个不同的奇数[3,5]。因此,答案是5。

示例3:

输入:nums=[1,2,3,2]

输出:3

解释:

最长平衡子数组是[2,3,2]。

它有1个不同的偶数[2]和1个不同的奇数[3]。因此,答案是3。

提示:

1<=nums.length<=105

1<=nums[i]<=105

问题分析:

本问题的解决采用枚举算法,分为下面几个步骤:

一是判断一个数组a是否是一个奇偶平衡数组,这是后面用枚举算法时进行检验的关键;

二是从给定的数组nums中枚举出所有不同的子数组,检验其平衡性,并找出其中长度最长的平衡子数组,返回这个子数组及其长度。

程序如下:

python 复制代码
#判断一个数组a中不同奇偶数数量,如果是平衡的,返回True,否则返回False
def check_odd_or_even_array(a):
    a=list(set(a))
    n=len(a)
    odd=0
    for i in a:
        if i%2==0:
            odd=odd+1
    return True if odd==n-odd else False

#分解数组nums中的所有子数组,判断其奇偶平衡状态,统计长度最长的平衡子数组并返回其长度
def get_max_odd_or_even_sub_array(nums):
    n=len(nums)
    max_len=0
    max_sub=''
    for i in range(n):
        for j in range(i+1,n+1):
            a=nums[i:j]
            k=len(a)
            if check_odd_or_even_array(a) and max_len<k:
                max_len=k
                max_sub=a
    return max_len,max_sub

#主程序
nums=eval(input('pls input nums='))
max_len,max_sub=get_max_odd_or_even_sub_array(nums)
print(f'最长子数组的长度为{max_len},最长子数组为{max_sub}')

运行实例一

pls input nums=[1,2,3,2,2,4,5,3,7]

最长子数组的长度为7,最长子数组为[2, 3, 2, 2, 4, 5, 3]

运行实例二

pls input nums=[1,2,3,4,4,5,6]

最长子数组的长度为7,最长子数组为[1, 2, 3, 4, 4, 5, 6]

运行实例三

pls input nums=[1,3,4,4,4,5]

最长子数组的长度为4,最长子数组为[3, 4, 4, 4]

解决问题,要抓住关键,合理选择算法。

相关推荐
MATLAB代码顾问21 分钟前
Python实现蜂群算法优化TSP问题
开发语言·python·算法
代码飞天25 分钟前
机器学习算法和函数整理——助力快速查阅
人工智能·算法·机器学习
yaodong51833 分钟前
不会Python也能数据分析:Gemini 3.1 Pro解决办公问题的SQL自动生成
python·sql·数据分析
jiushiapwojdap33 分钟前
LU分解法求解线性方程组Matlab实现
数据结构·其他·算法·matlab
BU摆烂会噶1 小时前
【LangGraph】持久化实现的三大能力——时间旅行
数据库·人工智能·python·postgresql·langchain
笨笨饿1 小时前
69_如何给自己手搓一个串口
linux·c语言·网络·单片机·嵌入式硬件·算法·个人开发
纽扣6671 小时前
【算法进阶之路】链表进阶:删除、合并、回文与排序全解析
数据结构·算法·链表
消失的旧时光-19432 小时前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法
智者知已应修善业2 小时前
【51单片机不用数组动态数码管显示字符和LED流水灯】2023-10-3
c++·经验分享·笔记·算法·51单片机
AI进化营-智能译站3 小时前
ROS2 C++开发系列16-智能指针管理传感器句柄|告别ROS2节点内存泄漏与野指针
java·c++·算法·ai