629. K個逆序對數組

629. K個逆序對數組

給出兩個整數 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] 包含了從1到3的整數并且正好擁有 0 個逆序對。示例 2:輸入: n = 3, k = 1
輸出: 2
解釋: 
數組 [1,3,2] 和 [2,1,3] 都有 1 個逆序對。

說明:

  • n 的范圍是 [1, 1000] 并且 k 的范圍是 [0, 1000]。

解題思路

狀態轉移公式的推導

例如當n=3 ,k=2時,xxx代表n=3時的逆序對數組的任意情況,我們需要計算n=4并且k=2的情況,可以看成是向n=3時的所有逆序對數組插入值4,下面是插入的幾種情況

  1. 4xxx,因為4是當前的最大值,必然大于后面3個元素,所以能產生3對逆序對,超出了k=2
  2. x4xx,因為4是當前的最大值,必然大于后面2個元素,所以必然能產生2對逆序對,又因為我們需要逆序對的數量k=2,所以只能從n=2,k=0的情況轉移而來
  3. xx4x,因為4是當前的最大值,必然大于后面1個元素,所以必然能產生1對逆序對,又因為我們需要逆序對的數量k=2,所以只能從n=2,k=1的情況轉移而來
  4. xxx4,因為4在最末尾,所以不能產生新的逆序對,又因為我們需要逆序對的數量k=2,所以只能從n=2,k=2的情況轉移而來

因此我們可以得出
dp[n+1][k]=dp[n][k-1]+dp[n][k-2]…dp[n][k-n+1]

使k=k+1得
dp[n+1][k+1]=dp[n][k]+dp[n][k-1]…dp[n][k-n+2]

兩式相減得:dp[n][k]=dp[n-1][k]+dp[n][k-1]-dp[n-1][k-n]

代碼

class Solution {
public:int kInversePairs(int n, int k) {vector<vector<int>> dp(n+1,vector<int>(k+1,0));dp[1][0]=1;int mod=1000000007;for (int i = 2; i <=n; ++i) {for (int j = 0; j <=k; ++j) {dp[i][j]=dp[i-1][j]+(j-1>=0?dp[i][j-1]:0)-(j-i>=0?dp[i-1][j-i]:0);if (dp[i][j]>=mod)dp[i][j]-=mod;else if (dp[i][j]<0)dp[i][j]+=mod;}}return dp[n][k];}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389813.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389813.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389813.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

zookeeper、hbase常見命令

a) Zookeeper&#xff1a;幫助命令-help i. ls /查看zk下根節點目錄 ii. create /zk_test my_data//在測試集群沒有創建成功 iii. get /zk_test my_data//獲取節點信息 iv. set / zk_test my_data//更改節點相關信息 v. delete /zk_test//刪除節點信…

鮮活數據數據可視化指南_數據可視化實用指南

鮮活數據數據可視化指南Exploratory data analysis (EDA) is an essential part of the data science or the machine learning pipeline. In order to create a robust and valuable product using the data, you need to explore the data, understand the relations among v…

2049. 統計最高分的節點數目

2049. 統計最高分的節點數目 給你一棵根節點為 0 的 二叉樹 &#xff0c;它總共有 n 個節點&#xff0c;節點編號為 0 到 n - 1 。同時給你一個下標從 0 開始的整數數組 parents 表示這棵樹&#xff0c;其中 parents[i] 是節點 i 的父節點。由于節點 0 是根&#xff0c;所以 p…

Linux lsof命令詳解

lsof&#xff08;List Open Files&#xff09; 用于查看你進程開打的文件&#xff0c;打開文件的進程&#xff0c;進程打開的端口(TCP、UDP)&#xff0c;找回/恢復刪除的文件。是十分方便的系統監視工具&#xff0c;因為lsof命令需要訪問核心內存和各種文件&#xff0c;所以需要…

史密斯臥推:杠鈴史密斯下斜臥推、上斜機臥推、平板臥推動作圖解

史密斯臥推&#xff1a;杠鈴史密斯下斜臥推、上斜機臥推、平板臥推動作圖解 史密斯臥推&#xff08;smith press&#xff09;是固定器械上完成的臥推&#xff0c;對于初級健身者來說&#xff0c;自由臥推&#xff08;啞鈴臥推、杠鈴臥推&#xff09;還不能很好地把握平衡性&…

圖像特征 可視化_使用衛星圖像可視化建筑區域

圖像特征 可視化地理可視化/菲律賓/遙感 (GEOVISUALIZATION / PHILIPPINES / REMOTE-SENSING) Big data is incredible! The way Big Data manages to bring sciences and business domains to new levels is almost sort of magical. It allows us to tap into a variety of a…

ELK入門01—Elasticsearch安裝

1. 安裝 首先從官網下載安裝包此處我們選擇2.4.6這個版本,然后下載tar壓縮包下載以后直接解壓&#xff0c;就算安裝完成了 tar zxvf elasticsearch-2.4.6.tar.gz 2. 配置 編輯elasticsearch配置文件 # 進入安裝目錄 cd elasticsearch-2.4.6 # 編輯配置文件 vi ./config/elastic…

375. 猜數字大小 II

375. 猜數字大小 II 我們正在玩一個猜數游戲&#xff0c;游戲規則如下&#xff1a; 我從 1 到 n 之間選擇一個數字。你來猜我選了哪個數字。如果你猜到正確的數字&#xff0c;就會 贏得游戲 。如果你猜錯了&#xff0c;那么我會告訴你&#xff0c;我選的數字比你的 更大或者更…

hdu_2048 錯排問題

錯排問題本質上就是一個動態規劃問題&#xff0c;其狀態轉移方程為&#xff1a; 記d[n]為n個人錯排情況的總數。 那么策略可以描述為&#xff1a;分析第n個人錯排的可能情況&#xff1a; 1&#xff09;前n-1個人滿足錯排的情況&#xff0c;那么第n個人加入后還要錯排意味著第n個…

海量數據尋找最頻繁的數據_在數據中尋找什么

海量數據尋找最頻繁的數據Some activities are instinctive. A baby doesn’t need to be taught how to suckle. Most people can use an escalator, operate an elevator, and open a door instinctively. The same isn’t true of playing a guitar, driving a car, or anal…

OSChina 周四亂彈 —— 要成立復仇者聯盟了,來報名

2019獨角獸企業重金招聘Python工程師標準>>> Osc亂彈歌單&#xff08;2018&#xff09;請戳&#xff08;這里&#xff09; 【今日歌曲】 Devoes &#xff1a;分享吳若希的單曲《越難越愛 (Love Is Not Easy / TVB劇集《使徒行者》片尾曲)》: 《越難越愛 (Love Is No…

2023. 連接后等于目標字符串的字符串對

2023. 連接后等于目標字符串的字符串對 給你一個 數字 字符串數組 nums 和一個 數字 字符串 target &#xff0c;請你返回 nums[i] nums[j] &#xff08;兩個字符串連接&#xff09;結果等于 target 的下標 (i, j) &#xff08;需滿足 i ! j&#xff09;的數目。 示例 1&…

webapi 找到了與請求匹配的多個操作(ajax報500,4的錯誤)

1、ajax報500,4的錯誤&#xff0c;然而多次驗證自己的后臺方法沒錯。然后跟蹤到如下圖的錯誤信息&#xff01; 2、因為兩個函數都是無參的&#xff0c;返回值也一樣。如下圖 3&#xff0c;我給第一個函數加了一個參數后&#xff0c;就不報錯了&#xff0c;所以我想&#xff0c;…

可視化 nlp_使用nlp可視化尤利西斯

可視化 nlpMy data science experience has, thus far, been focused on natural language processing (NLP), and the following post is neither the first nor last which will include the novel Ulysses, by James Joyce, as its primary target for NLP and literary elu…

區分'方法'和'函數'

區分方法: 1在類中的叫方法,在類外面的叫函數 2在名字前加 對象名. 的叫方法, 在名字前加 類名. 或 只寫名字的 叫函數 通過代碼進行區分: 1 from types import MethodType,FunctionType 2 def check(arg): 3 if isinstance(arg,MethodType)#判斷第一個參數是否是第二個參數…

520. 檢測大寫字母

520. 檢測大寫字母 我們定義&#xff0c;在以下情況時&#xff0c;單詞的大寫用法是正確的&#xff1a; 全部字母都是大寫&#xff0c;比如 “USA” 。單詞中所有字母都不是大寫&#xff0c;比如 “leetcode” 。如果單詞不只含有一個字母&#xff0c;只有首字母大寫&#xf…

Java 打包 FatJar 方法小結

在函數計算(Aliyun FC)中發布一個 Java 函數&#xff0c;往往需要將函數打包成一個 all-in-one 的 zip 包或者 jar 包。Java 中這種打包 all-in-one 的技術常稱之為 Fatjar 技術。本文小結一下 Java 里打包 FatJar 的若干種方法。 什么是 FatJar FatJar 又稱作 uber-Jar&#x…

常見問題及解決方案(前端篇)

一、jquery validate 默認校驗規則序號 規則 描述1 requiredtrue 必須輸入的字段。2 remote "check.php" 使用 ajax 方法調用 check.php 驗證輸入值。3 emailtrue 必須輸入正確格式的電子郵件。4 urltrue 必須輸入正確格式的網址。5 datetrue 必須輸入正確格式的日期…

本地搜索文件太慢怎么辦?用Everything搜索秒出結果(附安裝包)

每次用電腦本地的搜索都慢的一批&#xff0c;后來發現了一個搜索利器 基本上搜索任何文件都不用等待。 并且頁面非常簡潔&#xff0c;也沒有任何廣告&#xff0c;用起來非常舒服。 軟件官網如下&#xff1a; voidtools 官網提供三個版本&#xff0c;用起來差別不大。 網盤鏈…

2024. 考試的最大困擾度

2024. 考試的最大困擾度 一位老師正在出一場由 n 道判斷題構成的考試&#xff0c;每道題的答案為 true &#xff08;用 ‘T’ 表示&#xff09;或者 false &#xff08;用 ‘F’ 表示&#xff09;。老師想增加學生對自己做出答案的不確定性&#xff0c;方法是 最大化 有 連續相…