解决leetcode第3948题字典序最大的MEX数组

3948.字典序最大的MEX数组

难度:困难

问题描述:

给你一个整数数组nums。

你需要构造一个数组result,具体做法是重复执行以下操作,直到nums变为空:

选择一个整数k,满足1<=k<=len(nums)。

计算nums的前k个元素的MEX。

将这个MEX附加到result。

从nums中移除前k个元素。

返回执行这些操作后能得到的字典序最大的数组result。

数组的MEX是指数组中不包含的最小非负整数。

如果两个数组a和b在第一个不同的下标处,数组a的元素大于数组b的对应元素,则数组a字典序大于数组b。如果前min(a.length,b.length)个元素都相同,那么较长的数组是字典序更大的数组。

示例1:

输入:nums=0,1,0

输出:2,1

解释:

取前k=2个元素0,1,其MEX=2。当前result=2。

剩余数组0的MEX=1。因此,最终的result=2,1。

示例2:

输入:nums=1,0,2

输出:3

解释:

取前k=3个元素1,0,2,其MEX=3。

nums现在为空。因此,最终的result=3。

示例3:

输入:nums=3,1

输出:0,0

解释:

取k=1,第一个元素3的MEX=0。当前result=0。

剩余数组1的MEX=0。因此,最终的result=0,0。

提示:

1<=nums.length<=10**5

0<=numsi<=10**5

问题分析:

解决本问题,要处理两个问题,一是MEX要大,二是在MEX尽可能大的同时,处理次数尽可能多,这样才能得到字典序最大的result数组。为此设计两个函数,一是 get_mex(a),其功能是找出一个数组a中不包含的最小非负整数MEX,二是split_array(a),其功能是对一个数组a进行最小拆分,返回拆分位置和MEX值。主程序利用循环,将每一次得到的MEX添加到result中,并根据拆分位置,生成下一次要进行拆分处理的数组a,直到不能拆分为止,最后输出result即可。

程序如下:

python 复制代码
#找出一个数组中不包含的最小非负整数即MEX并返回
def get_mex(a):
    b=list(x for x in a if x>=0)
    c=sorted(list(set(b)))
    i=0
    while True:
        if i in c:
            i+=1
            continue
        else:
            return i

#将a分成两部分,从第一个元素开始向后面查找,直到某一个元素之后,若前面部分(包括这个元素)的mex=mex,返回索引号i和mex
# 如果这个元素是最后一个元素,则返回n和mex
def split_array(a):
    m=get_mex(a)
    n=len(a)
    for i in range(1,n+1):
        t=a[:i]
        if get_mex(t)==m:
            return [i,m]
        else:
            continue

#主程序
a=eval(input('pls input a='))
result=[]
n=len(a)
while True:
    i, m = split_array(a)
    if i==n:
        result.append(m)
        break
    else:
        result.append(m)
        a=a[i:]
        n=len(a)
print(result)

运行实例一

pls input a=3,2,1,0,1,2,1

4, 0, 0, 0

运行实例二

pls input a=-1,2,1,0,-3,0,1

3, 2

相关推荐
怕浪猫3 小时前
GEO 优化到底是什么?AI时代内容创作者必须懂的新技能
算法·面试·github
朝朝辞暮i4 小时前
C++ 第 23 课:class —— 开始真正进入面向对象
开发语言·c++·算法
Evand J4 小时前
【MATLAB例程】三维RRT+APF避障路径规划与到达角(AOA)定位算法|三维路径优化与定位仿真例程
算法·matlab·路径规划·代码·定位·rrt·aoa
言乐65 小时前
HTML视频审核模型
python·django·virtualenv·pygame·tornado
言乐66 小时前
Python根据无法识别搜索词找出可能输入内容模型
开发语言·python·django·virtualenv·pygame
weixin_307779136 小时前
有限产能智能排产与动态重排智能体:从需求解构到技术实现
开发语言·人工智能·算法·架构
朝朝辞暮i6 小时前
C++ 第 27 课:智能指针 shared_ptr
开发语言·c++·算法
yl45307 小时前
硫酸泄露处理生产商怎么选才够专业
大数据·人工智能·python
朝朝辞暮i7 小时前
C++ 第 29 课:回调函数 Callback
开发语言·c++·算法
笨笨饿7 小时前
140_AI新手村MCP与Skills是干嘛的
开发语言·人工智能·python·stm32·单片机·嵌入式硬件·物联网