解决leetcode第3911题.移除子数组元素后第k小偶数

3911.移除子数组元素后第K小偶数

难度:困难

问题描述:

给你一个整数数组nums,其中nums是严格递增的。

另给你一个二维整数数组queries,其中queries[i]=[li,ri,ki]。

对于每个查询[li,ri,ki]:

考虑子数组nums[li..ri]

从无限的所有正偶数序列中:2,4,6,8,10,12,14,...

移除所有出现在子数组nums[li..ri]中的元素。

找到移除后序列中剩余的第ki个最小整数。

返回一个整数数组ans,其中ans[i]是第i个查询的结果。

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

如果数组中的每个元素都严格大于它的前一个元素(如果存在),则称该数组是严格递增的。

示例1:

输入:nums=[1,4,7],queries=[[0,2,1],[1,1,2],[0,0,3]]

输出:[2,6,6]

解释:

i queries[i] nums[li..ri] 移除的偶数 剩余的偶数 ki ans[i]

0 [0,2,1] [1,4,7] [4] 2,6,8,... 1 2

1 [1,1,2] [4] [4] 2,6,8,... 2 6

2 [0,0,3] [1] [] 2,4,6,... 3 6

因此,ans=[2,6,6]。

示例2:

输入:nums=[2,5,8],queries=[[0,1,2],[1,2,1],[0,2,4]]

输出:[6,2,12]

解释:

i queries[i] nums[li..ri] 移除的偶数 剩余的偶数 ki ans[i]

0 [0,1,2] [2,5] [2] 4,6,8,... 2 6

1 [1,2,1] [5,8] [8] 2,4,6,... 1 2

2 [0,2,4] [2,5,8] [2,8] 4,6,10,12,... 4 12

因此,ans=[6,2,12]。

示例3:

输入:nums=[3,6],queries=[[0,1,1],[1,1,3]]

输出:[2,8]

解释:

i queries[i] nums[li..ri] 移除的偶数 剩余的偶数 ki ans[i]

0 [0,1,1] [3,6] [6] 2,4,8,... 1 2

1 [1,1,3] [6] [6] 2,4,8,... 3 8

因此,ans=[2,8]。

提示:

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

1<=nums[i]<=10**9

nums是严格递增的

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

queries[i]=[li,ri,ki]

0<=li<=ri<nums.length

1<=ki<=10**9

问题分析:

本问题解决步骤较多,可以将这些步骤分解成几个不同的功能,以函数实现。

一是从nums数组中根据查询queries序列中的一个查询,提取子数组,然后找出其中的偶数构成的序列并返回。这一功能由函数get_sequence_of_even_numbers(nums,querie)实现,其中nums是待查询的原始数组,querie为查询序列中的一个查询。

二是根据查询处理得到的偶数序列a和给定的k值,从无穷的偶数序列中排除a中的偶数之后,找到序列中的第k个最小整数,这通过函数get_k_min_int(a,k)实现。

三是在主程序中利用循环结构对查询序列中的每个查询,利用上面的两个函数进行处理,得到每次查询返回的第k个最小整数,依次存入列表,最后输出该列表即为问题的解。

程序如下:

复制代码
#根据查询querie找出nums中的子数组,并返回其中的偶数构成的序列
def get_sequence_of_even_numbers(nums,querie):
    a=nums[querie[0]:querie[1]+1]
    b=list(x for x in a if x%2==0)
    return b

#从无穷的偶数序列中排除掉a列表中的偶数之后,找到第k个最小整数并返回
def get_k_min_int(a,k):
    n=len(a)
    i=0
    c=0
    while True:
        i+=2
        if i in a and n>0:
            n-=1
            continue
        else:
            c+=1
            if c==k:
                return i


#主程序
nums=eval(input('pls input nums='))
queries=eval(input('pls input queries='))
t=[]
for i in queries:
    a=get_sequence_of_even_numbers(nums,i)
    b=get_k_min_int(a,i[2])
    t.append(b)
print(t)

运行实例一

pls input nums=[1,2,4,7,8,23]

pls input queries=[[0,2,5],[2,5,7]]

14, 18

运行实例二

pls input nums=[1,3,5]

pls input queries=[[0,2,3]]

6

相关推荐
猫猫的小茶馆12 小时前
【Python】函数与模块化编程
linux·开发语言·arm开发·驱动开发·python·stm32
ʚ希希ɞ ྀ12 小时前
单词拆分----dp
算法
Miss_min12 小时前
128K长序列数据生成
开发语言·python·深度学习
love530love12 小时前
MingLi-Bench 项目部署实录:基于 EPGF 架构的工程化实践
人工智能·windows·python·架构·aigc·epgf·mingli-bench
猿儿本无心13 小时前
快速搭建Python项目(Vscode+uv+FastAPI)
vscode·python·uv
智者知已应修善业13 小时前
【51单片机LED闪烁10次数码管显示0-9】2023-12-14
c++·经验分享·笔记·算法·51单片机
智者知已应修善业13 小时前
【51单片机2按键控制1个敞亮LED灯闪烁和熄灭】2023-11-3
c++·经验分享·笔记·算法·51单片机
AI算法沐枫13 小时前
大模型 | 大模型之机器学习基本理论
人工智能·python·神经网络·学习·算法·机器学习·计算机视觉
吃着火锅x唱着歌13 小时前
LeetCode 1019.链表中的下一个更大节点
算法·leetcode·链表
OzupeSir13 小时前
三门两羊问题 - 蒙提霍尔问题
python·概率论