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

相关推荐
尼给路达哟6 小时前
node(koa)和python(fastapi)面试
python·面试·fastapi
Nil2086 小时前
leetcode 136只出现一次的数字
leetcode·哈希算法·散列表
CV@CV6 小时前
世界模型与智能体协同推理逻辑
人工智能·算法·边缘计算·量子计算·具身智能
jiayoushijie-泽宣6 小时前
SHIFT-PathFormer:专家轨迹蒸馏、连续安全优化与超大迷宫实验
算法
曲径海盗7 小时前
【Python 学习第 32 天】字符串基础
python·学习笔记·编程入门
田里的水稻7 小时前
PyTorch_torchvision---数据集下载\TensorBoard可视化
人工智能·pytorch·python·深度学习·机器学习
UIU1147 小时前
P1003 [NOIP 2011 提高组] 铺地毯
数据结构·c++·算法
程序员正茂7 小时前
Win11使用自定义训练集训练ncnn模型
python·yolo·图像识别·移动端·ncnn
爱读书的小胖8 小时前
LeetCode 88. 合并两个有序数组 C 解题分析
c语言·数据结构·算法
zwd20058 小时前
Manim 画布尺寸与像素换算详解:frame_width、frame_height、pixel_width 和画质参数(0.21.0 实测)
python·分辨率·manim·数学动画·frame_width·manim教程