解决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

相关推荐
倒头就睡的小比特4 天前
算法竞赛C++常用的STL
c++·算法
默_笙4 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
qq_426003964 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫4 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技4 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读4 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
猎头南楼4 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
只睡四小时4 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
旖旎夜光4 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控