解决leetcode第3768题.固定长度子数组中的最小逆序对数目

3768.固定长度子数组中的最小逆序对数目

难度:困难

问题描述:

给你一个长度为n的整数数组nums和一个整数k。

逆序对是指nums中满足i<j且numsi>numsj的一对下标(i,j)。

子数组的逆序对数量是指该子数组内逆序对的个数。

返回nums中所有长度为k的子数组中的最小逆序对数量。

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

示例1:

输入:nums=3,1,2,5,4,k=3

输出:0

解释:

我们考虑所有长度为k=3的子数组(下面的下标是相对于每个子数组而言的):

3,1,2有2个逆序对:(0,1)和(0,2)。

1,2,5有0个逆序对。

2,5,4有1个逆序对:(1,2)。

所有长度为3的子数组中,最小的逆序对数量是0,由子数组1,2,5获得。

示例2:

输入:nums=5,3,2,1,k=4

输出:6

解释:

只有一个长度为k=4的子数组:5,3,2,1。

在该子数组中,逆序对为:(0,1),(0,2),(0,3),(1,2),(1,3),和(2,3)。

逆序对总数为6,因此最小逆序对数量是6。

示例3:

输入:nums=2,1,k=1

输出:0

解释:

所有长度为k=1的子数组只包含一个元素,因此不可能存在逆序对。

因此最小逆序对数量为0。

提示:

1<=n==nums.length<=105

1<=numsi<=109

1<=k<=n

问题分析:

解决这个问题,只要解决好几个小问题就行了

一是对于一个数组a,统计其逆序对数目

二是对于一个给定的数组nums,将所有长度为k的子数组找出

三剩下的就是对所有长度为k的子数组分别求出其逆序对数目,统计其中数目最小的并输出

具体操作请参考程序内容

程序如下:

python 复制代码
#统计一个数组中逆序对数目并返回
def get_reverse_pairs(a):
    n=len(a)
    c=0
    for i in range(n-1):
        for j in range(i,n):
            if a[i]>a[j]:
                c+=1
    return c

#将一个数组a分解为长度为k的子数组,并以列表的形式返回
def get_k_sub_array_from_a(a,k):
    n=len(a)
    t=[]
    for i in range(n-k+1):
        t.append(a[i:i+k])
    return t

#主程序
nums=eval(input('pls input nums='))
k=int(input('pls input k='))
t=[]
lxd=get_k_sub_array_from_a(nums,k)
print(f'长度为{k}的子数组有{lxd}')
for i in lxd:
    c=get_reverse_pairs(i)
    print(f'{i}有{c}个逆序对')
    t.append(c)
print(f'最小逆序对数量为{min(t)}')

运行实例一

pls input nums=3,1,2,5,4

pls input k=3

长度为3的子数组有\[3, 1, 2, 1, 2, 5, 2, 5, 4]

3, 1, 2有2个逆序对

1, 2, 5有0个逆序对

2, 5, 4有1个逆序对

最小逆序对数量为0

运行实例二

pls input nums=3,4,2

pls input k=1

长度为1的子数组有\[3, 4, 2]

3有0个逆序对

4有0个逆序对

2有0个逆序对

最小逆序对数量为0

运行实例三

pls input nums=5,3,2,4

pls input k=2

长度为2的子数组有\[5, 3, 3, 2, 2, 4]

5, 3有1个逆序对

3, 2有1个逆序对

2, 4有0个逆序对

最小逆序对数量为0

相关推荐
段一凡-华北理工大学9 小时前
工业智能体:从Codex/Claude到项目实战~系列文章05:从“AI助手“到“工业智能体“:能力跃迁与落地范式
人工智能·python·claude·codex·工业智能体·高炉炼铁智能化
深蓝AI9 小时前
ContextVar 到线程池就丢了?asyncio.to_thread 和 run_in_executor 实测
python
岁月宁静10 小时前
什么是 Agent:从"会聊天"到"会做事"
人工智能·python
岁月宁静10 小时前
AI 应用开发工程师简历怎么写:HR 初筛、技术复筛、面试追问,三道关卡各看什么?
人工智能·python·面试
来让爷抱一个11 小时前
Python 异步里混用同步库,事件循环被卡住的全过程
开发语言·python
小肝一下13 小时前
3.基础语法(3)
python
Dream it possible!13 小时前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
心抵鹊13 小时前
算法之双指针系列(一)
算法·leetcode
十二13 小时前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
深蓝AI13 小时前
Python 子进程树:父进程被杀后,孙进程为何还在跑?
python