LeetCode 629. K个逆序对数组(DP)

文章目录

    • 1. 题目
    • 2. 动态规划
    • 3. 优化的DP

1. 题目

给出两个整数 n 和 k,找出所有包含从 1 到 n 的数字,且恰好拥有 k 个逆序对的不同的数组的个数。

逆序对的定义如下:对于数组的第i个和第 j个元素,如果满i < j且 a[i] > a[j],则其为一个逆序对;否则不是。

由于答案可能很大,只需要返回 答案 mod 109 + 7 的值。

示例 1:
输入: n = 3, k = 0
输出: 1
解释: 
只有数组 [1,2,3] 包含了从13的整数并且正好拥有 0 个逆序对。示例 2:
输入: n = 3, k = 1
输出: 2
解释: 
数组 [1,3,2][2,1,3] 都有 1 个逆序对。
说明:n 的范围是 [1, 1000] 并且 k 的范围是 [0, 1000]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/k-inverse-pairs-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 动态规划

  • f(i,j)f(i,j)f(i,j)表示i个数,j个逆序对的组合方式种类
  • i个数的j个逆序对的组合,可以在i-1个数的基础上得到
  • 把第i个数插入到前面i-1i个空位上,相应的逆序数会变化
  • f(i - 1, j)插在最后,逆序增加0,插在倒数第1个前面,逆序数为1,为保持总逆序数j,那i-1个数的逆序数为j-1,依次类推
  • f(i,j)=f(i−1,j)+f(i−1,j−1)+...+f(i−1,j−i+1)f(i, j) = f(i - 1, j) + f(i - 1, j - 1) + ... + f(i - 1, j - i + 1)f(i,j)=f(i1,j)+f(i1,j1)+...+f(i1,ji+1)
class Solution {
public:int kInversePairs(int n, int k) {//f(i,j)表示i个数,j个逆序对的组合方式//f(i, j) = f(i - 1, j) + f(i - 1, j - 1) + ... + f(i - 1, j - i + 1)int dp[n+1][k+1] = {0};int i, j, time, idx;for(i = 1; i <= n; i++)dp[i][0] = 1;for(i = 2; i <= n; i++){for(j = 1; j <= k; j++){time = i;idx = j;while(time-- && idx >= 0){dp[i][j] += dp[i-1][idx];dp[i][j] %= 1000000007;idx--;}}}return dp[n][k];}
};

时间复杂度 O(k∗n2)O(k*n^2)O(kn2)

在这里插入图片描述

3. 优化的DP

  • f(i,j)=f(i−1,j)+f(i−1,j−1)+...+f(i−1,j−i+1)f(i, j) = f(i - 1, j) + f(i - 1, j - 1) + ... + f(i - 1, j - i + 1)f(i,j)=f(i1,j)+f(i1,j1)+...+f(i1,ji+1)
  • 代入j=j-1到上式
  • f(i,j−1)=f(i−1,j−1)+f(i−1,j−2)+...+f(i−1,j−i)f(i, j-1) = f(i - 1, j-1) + f(i - 1, j - 2) + ... + f(i - 1, j - i)f(i,j1)=f(i1,j1)+f(i1,j2)+...+f(i1,ji)
  • 做差,f(i,j)−f(i,j−1)=f(i−1,j)−f(i−1,j−i)f(i, j)-f(i, j - 1) = f(i - 1, j) - f(i - 1, j - i)f(i,j)f(i,j1)=f(i1,j)f(i1,ji)
  • f(i,j)=f(i,j−1)+f(i−1,j)−f(i−1,j−i)f(i, j)=f(i, j - 1) +f(i - 1, j) - f(i - 1, j - i)f(i,j)=f(i,j1)+f(i1,j)f(i1,ji)
class Solution {
public:int kInversePairs(int n, int k) {int dp[n+1][k+1] = {0};int i, j, maxk, M = 1000000007;for(i = 1; i <= n; i++)dp[i][0] = 1;for(i = 2; i <= n; i++){maxk = i*(i-1)/2;//最大的逆序数for(j = 1; j <= k && j <= maxk; j++){dp[i][j] = dp[i][j-1]%M + (M + dp[i-1][j]-(j>=i ? dp[i-1][j-i]:0))%M;//dp[i-1][j] 不一定比 dp[i-1][j-i] 大(正态分布),+M防止负数dp[i][j] %= M;}}return dp[n][k];}
};

时间复杂度 O(k∗n)O(k*n)O(kn)
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478288.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速的找出元素是否在list中 python

number [[1,2],[3,2]] num np.array(number) np.argwhere(num2) np.argwhere(num2) array([[0, 1], [1, 1]], dtypeint64) 注意&#xff1a;只能是维度相同的时候&#xff0c;才能用该方法。 om ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or nd…

论文浅尝 | 知识图谱的神经符号推理(上)

笔记整理 | 叶橄强&#xff0c;浙江大学在读硕士&#xff0c;研究方向为知识图谱的表示学习和预训练。知识图谱推理是支撑信息提取、信息检索和推荐等机器学习任务的基础组成部分&#xff0c;并且由于知识图可以看作知识的离散符号表示&#xff0c;自然可以利用符号技术做知识图…

ICML2021 | Self-Tuning: 如何减少对标记数据的需求?

文 | 王希梅&#xff0c;高敬涵&#xff0c;龙明盛&#xff0c;王建民源 | THUML本文介绍ICML2021的中稿论文&#xff1a;Self-Tuning for Data-Efficient Deep Learning&#xff0c;就“如何减少对标记数据的需求”这一重要问题给出了我们的思考。论文标题&#xff1a;Self-Tu…

美团点评Docker容器管理平台

本文是郑坤根据第14期美团点评技术沙龙“你不知道的美团云”演讲内容整理而成&#xff0c;已发表在《程序员》杂志2017年1月刊。 美团点评容器平台简介 本文介绍美团点评的Docker容器集群管理平台&#xff08;以下简称“容器平台”&#xff09;。该平台始于2015年&#xff0c;是…

Python 获取本机或者服务器的 IP 地址

获取计算机名称 hostname socket.gethostname() 获取本机 IP ip socket.gethostbyname(hostname) print(ip) 具体操作 import socket hostname socket.gethostname() ip socket.gethostbyname(hostname) print(ip)通常使用 socket.gethostname() 方法即可获取本机 IP …

LeetCode 754. 到达终点数字(数学推理)

1. 题目 在一根无限长的数轴上&#xff0c;你站在0的位置。终点在target的位置。 每次你可以选择向左或向右移动。第 n 次移动&#xff08;从 1 开始&#xff09;&#xff0c;走 n 步。 返回到达终点需要的最小移动次数。 示例 1: 输入: target 3 输出: 2 解释: 第一次移动…

论文浅尝 | 神经符号推理综述(下)

笔记整理 | 许泽众&#xff0c;浙江大学在读博士3、神经驱动的符号推理相比于之前的两种类型&#xff0c;神经驱动的符号推理的目的是挖掘规则&#xff0c;而神经网络在其中扮演的作用是解决纯符号推理的不确定性&#xff0c;并且能够有效的减少搜索空间。这种类型的方法的基本…

没有导师指导,该如何自己选题发CVPR?

| 背景底层计算机视觉技术&#xff0c;如图像增强、图像复原等&#xff0c;一直以来都是一个重要且热门的研究方向。传统的方法多基于稀疏编码、小波变换等技术&#xff0c;近年来&#xff0c;深度学习的兴起为该领域带来了新的发展机遇&#xff0c;同时大幅度提升了方法性能。…

Android硬件加速原理与实现简介

在手机客户端尤其是Android应用的开发过程中&#xff0c;我们经常会接触到“硬件加速”这个词。由于操作系统对底层软硬件封装非常完善&#xff0c;上层软件开发者往往对硬件加速的底层原理了解很少&#xff0c;也不清楚了解底层原理的意义&#xff0c;因此常会有一些误解&…

LeetCode 482. 密钥格式化

1. 题目 给定一个密钥字符串S&#xff0c;只包含字母&#xff0c;数字以及 ‘-’&#xff08;破折号&#xff09;。N 个 ‘-’ 将字符串分成了 N1 组。给定一个数字 K&#xff0c;重新格式化字符串&#xff0c;除了第一个分组以外&#xff0c;每个分组要包含 K 个字符&#xf…

暑期学校 | 东南大学2021年国际暑期学校项目:从感知理解到智能认知 (知识图谱及应用课程)...

国际暑期学校开课啦 项目介绍 从感知理解到智能认知——走近新一代人工智能From perceptual understanding to intelligent cognition-Approaching a new generation of AI本项目是由东南大学计算机科学与工程学院、软件学院、人工智能学院组织&#xff0c;通过开设人工智…

LeetCode 970. 强整数

文章目录1. 题目2. 解题2.1 暴力法2.2 优化双重循环1. 题目 给定两个正整数 x 和 y&#xff0c;如果某一整数等于 xi yj&#xff0c;其中整数 i > 0 且 j > 0&#xff0c;那么我们认为该整数是一个强整数。 返回值小于或等于 bound 的所有强整数组成的列表。 你可以按…

ACL'21 | 弱标签的垃圾数据,也能变废为宝!

文 | LawsonAbs编 | 小戏是不是感觉 NER 领域效果提升太过困难&#xff1f;最近一篇来自 Amazon 的文章提出使用强弱标签结合的方式来解决 NER 的问题。强弱标签结合其实非常立足实际的数据情况——干净又准确的强标签数据非常稀少&#xff0c;更多的是标注质量存在问题的弱标签…

会议交流 | “数据智能与知识服务”研讨会的专家报告题目已更新!

“数据智能与知识服务”研讨会的专家报告题目有更新啦&#xff01;这些专家既有久负盛名的国际知名学者、也有具有前瞻洞见的业界领袖&#xff0c;更有精通各种工程实战的技术大咖。他们将围绕“数据智能与知识服务”的核心主题&#xff0c;为您带来一场豪华的学术盛宴&#xf…

dockerfile拉取python3.7镜像

docker构建python3.7镜像&#xff1a;https://zhuanlan.zhihu.com/p/137288195 FROM&#xff1a;需要什么环境 ENV&#xff1a;修改path&#xff0c;即增加/usr/local/bin这个环境变量 ADD&#xff1a;将本地代码放到虚拟容器中&#xff0c;它有两个参数&#xff0c;第一个是 .…

LeetCode 849. 到最近的人的最大距离

1. 题目 在一排座位&#xff08; seats&#xff09;中&#xff0c;1 代表有人坐在座位上&#xff0c;0 代表座位上是空的。 至少有一个空座位&#xff0c;且至少有一人坐在座位上。 亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。 返回他到离他…

可解释性:对神经网络中层特征复杂度的解释与拆分

文 | 任洁&#xff0c;李明杰&#xff0c;刘泽旭源 | 知乎大家好&#xff0c;我们是任洁&#xff0c;李明杰和刘泽旭&#xff0c;本研究是在张拳石老师 Qs.Zhang张拳石 指导下完成的工作。随着深度神经网络的应用日益广泛&#xff0c;可解释性也逐渐受到更多学者的关注。目前对…

新一代开源Android渠道包生成工具Walle

在Android 7.0&#xff08;Nougat&#xff09;推出了新的应用签名方案APK Signature Scheme v2后&#xff0c;之前快速生成渠道包的方式&#xff08;美团Android自动化之旅—生成渠道包&#xff09;已经行不通了&#xff0c;在此应用签名方案下如何快速生成渠道包呢&#xff1f…

领域应用 | 机器知道哪吒是部电影吗?解读阿里巴巴概念图谱AliCG

转载公众号 | PaperWeekly概念是人类认知世界的基石。比如对于“哪吒好看吗&#xff1f;”&#xff0c;“哪吒铭文搭配建议”两句话&#xff0c;人可以结合概念知识理解第一个哪吒是一部电影&#xff0c;第二个哪吒是王者荣耀的英雄。然而机器能理解吗&#xff1f;针对这一问题…

LeetCode 605. 种花问题

1. 题目 假设你有一个很长的花坛&#xff0c;一部分地块种植了花&#xff0c;另一部分却没有。可是&#xff0c;花卉不能种植在相邻的地块上&#xff0c;它们会争夺水源&#xff0c;两者都会死去。 给定一个花坛&#xff08;表示为一个数组包含0和1&#xff0c;其中0表示没种…