分治-歸并排序-逆序對問題

目錄

1.升序(以右邊的合并組為基準)

2.降序(以左邊的合并組為基準)

?3.逆對序--固定下標

1.升序(以右邊的合并組為基準)

找出左邊有多少個數比我(nums[right])大

  • 應該在每一次合并之前,進行逆序對查找
  • 每一個該合并的組都是按升序排列,所以當nums[left]<nums[right]時,應該left++,因為都是升序,所以當nums[left]>nums[right],right++時,left從當前位置不動。

class Solution {
public:vector<int> ret;int vim=0;int reversePairs(vector<int>& record) {ret.resize(record.size());mergesort(record,0,record.size()-1);return vim;}void merge(vector<int>&nums,int low,int high,int mid){int left=low,right=mid+1, i=0;while(left<=mid&&right<=high){if(nums[left]<=nums[right]) ret[i++]=nums[left++];else  {ret[i++]=nums[right++];vim+=(mid+1-left);}}while(left<=mid) ret[i++]=nums[left++];while(right<=high) ret[i++]=nums[right++];for(int i=0;i<high-low+1;i++){nums[i+low]=ret[i];}}void mergesort(vector<int>&nums,int low,int high){if(low>=high) return;int mid=(low+high)/2;mergesort(nums,low,mid);mergesort(nums,mid+1,high);merge(nums,low,high,mid);}
};

2.降序(以左邊的合并組為基準)

?找出多少個數比我小

?合并過程:

?

class Solution {
public:vector<int> ret;int vim=0;int reversePairs(vector<int>& record) {ret.resize(record.size());mergesort(record,0,record.size()-1);return vim;}void merge(vector<int>&nums,int low,int high,int mid){int left=low,right=mid+1, i=0;while(left<=mid&&right<=high){if(nums[left]>nums[right]) {vim+=(high-right+1);ret[i++]=nums[left++];}else  {ret[i++]=nums[right++];}}while(left<=mid) ret[i++]=nums[left++];while(right<=high) ret[i++]=nums[right++];for(int i=0;i<high-low+1;i++){nums[i+low]=ret[i];}}void mergesort(vector<int>&nums,int low,int high){if(low>=high) return;int mid=(low+high)/2;mergesort(nums,low,mid);mergesort(nums,mid+1,high);merge(nums,low,high,mid);}
};

?對比:

降序升序

void merge(vector<int>&nums,int low,int high,int mid)
? ? {
? ? ? ? int left=low,right=mid+1, i=0;
? ? ? ? while(left<=mid&&right<=high)
? ? ? ? {
? ? ? ? ? ? ?if(nums[left]>nums[right])?
? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? vim+=(high-right+1);
? ? ? ? ? ? ? ? ret[i++]=nums[left++];
? ? ? ? ? ? ?}
? ? ? ? ? ? else ?
? ? ? ? ? ? ?ret[i++]=nums[right++];

}
? ? ? ? while(left<=mid) ret[i++]=nums[left++];
? ? ? ? while(right<=high) ret[i++]=nums[right++];
? ? ? ? for(int i=0;i<high-low+1;i++)
? ? ? ? {
? ? ? ? ? ? nums[i+low]=ret[i];
? ? ? ? }
? ? }

?void merge(vector<int>&nums,int low,int high,int mid)
? ? {
? ? ? ? int left=low,right=mid+1, i=0;
? ? ? ? while(left<=mid&&right<=high)
? ? ? ? {
? ? ? ? ? ? ?if(nums[left]<=nums[right]) ????????????????ret[i++]=nums[left++];
? ? ? ? ? ? else ?
? ? ? ? ? ? {
? ? ? ? ? ? ? ? ret[i++]=nums[right++];
? ? ? ? ? ? ? ? vim+=(mid+1-left);
? ? ? ? ? ? }

? ? ? ? }
? ? ? ? while(left<=mid) ret[i++]=nums[left++];
? ? ? ? while(right<=high) ret[i++]=nums[right++];
? ? ? ? for(int i=0;i<high-low+1;i++)
? ? ? ? {
? ? ? ? ? ? nums[i+low]=ret[i];
? ? ? ? }
? ? }

?3.逆對序--固定下標

增加一個下標數據,和交換下標數組,當交換數組發生數據交換時,交換下標數組也要發生數據交換

?

class Solution {vector<int> tempnums,index,tempindex,count;
public:vector<int> countSmaller(vector<int>& nums) {int n=nums.size();tempnums.resize(n);//交換數組tempindex.resize(n);//交換下標index.resize(n);//存放原始下表count.resize(n);//存放結果for(int i=0;i<n;i++) index[i]=i;mergesort(nums,0,n-1);return count;}void merge(vector<int>&nums,int low,int high,int mid){int left=low,right=mid+1,i=0;while(left<=mid&&right<=high){if(nums[left]>nums[right]) {tempnums[i]=nums[left];tempindex[i]=index[left];count[index[left]]+=(high-right+1);i++;left++;}else{tempindex[i]=index[right];tempnums[i]=nums[right];i++;right++;}}while(left<=mid){tempnums[i]=nums[left];tempindex[i]=index[left];i++;left++;}while(right<=high){tempindex[i]=index[right];tempnums[i]=nums[right];i++;right++;}for(int j=0;j<i;j++){nums[j+low]=tempnums[j];index[j+low]=tempindex[j];}}void mergesort(vector<int>&nums,int low,int high){if(low>=high) return ;int mid=(low+high)>>1;mergesort(nums,low,mid);mergesort(nums,mid+1,high);merge(nums,low,high,mid);}
};

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

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

相關文章

(四)數據檢索與增強生成——讓對話系統更智能、更高效

上一篇&#xff1a;&#xff08;三&#xff09;鏈式工作流構建——打造智能對話的強大引擎 在前三個階段&#xff0c;我們已經搭建了一個基礎的智能對話&#xff0c;并深入探討了輸入輸出處理和鏈式工作流構建的細節。今天&#xff0c;我們將進入智能對話系統的高級階段——數…

JVM虛擬機篇(二):深入剖析Java與元空間(MetaSpace)

這里寫目錄標題 JVM虛擬機篇&#xff08;二&#xff09;&#xff1a;深入剖析Java與元空間&#xff08;MetaSpace&#xff09;一、引言二、全面認識Java2.1 Java的起源與發展歷程2.2 Java的特性2.2.1 簡單性2.2.2 面向對象2.2.3 平臺無關性2.2.4 健壯性2.2.5 安全性2.2.6 多線程…

如何查看 MySQL 的磁盤空間使用情況:從表級到數據庫級的分析

在日常數據庫管理中&#xff0c;了解每張表和每個數據庫占用了多少磁盤空間是非常關鍵的。這不僅有助于我們監控數據增長&#xff0c;還能為性能優化提供依據。 Google Gemini中國版調用Google Gemini API&#xff0c;中國大陸優化&#xff0c;完全免費&#xff01;https://ge…

[Windows] XHS-Downloader V2.4 | 小紅書無水印下載工具 支持多平臺批量采集

[Windows] XHS-Downloader 鏈接&#xff1a;https://pan.xunlei.com/s/VON4ygFN1JcyzLJJIOqIpqodA1?pwdsinu# XHS-Downloader 是一款開源免費的小紅書內容下載工具&#xff0c;支持無水印視頻 / 圖文提取、多鏈接批量處理及賬號作品采集。其核心優勢包括&#xff1a; 全平臺…

6.1 寬度優先搜索算法(BFS)

寬度優先搜索算法(BFS Breadth first search) 又稱廣度優先搜索&#xff0c;這種搜索是逐層的&#xff0c;搜索完上層&#xff0c;才會搜索下一層&#xff0c;直到找到目標節點。 搜索過程如圖中箭頭方向&#xff1a; 【例如】 八數碼難題&#xff1a;利用空格的移動&#xff…

基于LSTM的文本分類2——文本數據處理

前言 由于計算機無法認識到文字內容&#xff0c;因此在訓練模型時需要將文字映射到計算機能夠識別的編碼內容。 映射的流程如下&#xff1a; 首先將文字內容按照詞表映射到成唯一的數字ID。比如“我愛中國”&#xff0c;將“中”映射為1&#xff0c;將“國”映射到2。再將文…

Redis數據結構之ZSet

目錄 1.概述2.常見操作2.1 ZADD2.2 ZRANGE2.3 ZREVRANGE2.4 ZRANGEBYSCORE2.5 ZSCORE2.6 ZCARD2.6 ZREM2.7 ZINCRBY2.8 ZCOUNT2.9 ZMPOP2.10 ZRANK2.11 ZREVRANK 3.總結 1.概述 ZSet和Set一樣也是String類型元素的集合&#xff0c;且不允許重復的成員&#xff0c;不同的是ZSet…

什么是DHCP服務,在生活中的應用是什么?

提起DHCP&#xff0c;不接觸互聯網的可能會很陌生&#xff0c;其實并沒有這么高深&#xff0c;簡明扼要的說就是可以自動為連接的設備分配IP地址&#xff0c;子網掩碼&#xff0c;網關&#xff0c;dns等網絡參數。使連接步驟簡化&#xff0c;從而提高效率。 主要功能&#xff…

2025 AI智能數字農業研討會在蘇州啟幕,科技助農與數據興業成焦點

4月2日&#xff0c;以"科技助農數據興業”為主題的2025AI智能數字農業研討會在蘇州國際博覽中心盛大啟幕。本次盛會吸引了來自全國各地相關部門領導、知名專家學者、行業協會組織&#xff0c;以及縣級市農業企業代表、縣級市農產品銷售商等萬名嘉賓齊聚姑蘇城&#xff0c;…

論文導讀 | SOSP23 | Gemini:大模型 內存CheckPoint 快速故障恢復

本期分享的是一篇SOSP 2023論文&#xff1a; Gemini: Fast Failure Recovery in Distributed Training with In-Memory Checkpoints Zhuang Wang (Rice University), Zhen Jia (Amazon Web Services, Inc.), Shuai Zheng (Amazon Web Services), Zhen Zhang (Amazon Web Servic…

wordpress可視化數據采集Scrapes插件,WP博客網站自動采集發布

源碼介紹 wordpress自動采集Scrapes插件&#xff0c;支持ripro&#xff0c;modown&#xff0c;子比&#xff0c;7b2等多種WordPress主題 支持PHP7.4&#xff0c;PHP8.0及以上不支持 上傳插件到wp-content/plugins目錄&#xff0c;然后解壓 不需要寫采集規則&#xff0c;傻瓜式…

JavaScript Math(算數)指南

JavaScript Math&#xff08;算數&#xff09;指南 引言 JavaScript的Math對象是一個內置對象&#xff0c;提供了進行數學運算的方法和值。它對于執行基本的數學計算、生成隨機數以及執行更復雜的數學操作非常有用。本文將詳細介紹JavaScript中的Math對象&#xff0c;涵蓋其常…

Deep Reinforcement Learning for Robotics翻譯解讀

a. 機器人能力 1 單機器人能力&#xff08;Single-robot competencies&#xff09; 運動能力&#xff08;Mobility&#xff09; 行走&#xff08;Locomotion&#xff09;導航&#xff08;Navigation&#xff09; 操作能力&#xff08;Manipulation&#xff09; 靜態操作&…

最新扣子(Coze)案例教程:最新抖音視頻文案提取方法替代方案,音頻視頻提取文案插件制作,手把手教學,完全免費教程

&#x1f468;?&#x1f4bb; 星球群同學反饋&#xff0c;扣子平臺的視頻提取插件已下架&#xff0c;很多智能體及工作流不能使用&#xff0c;斜杠君這里研究了一個替代方案分享給大家。 方案原理&#xff1a;無論是任何視頻或音頻轉文案&#xff0c;我們提取的方式首先都是要…

yum list查詢時部分包查找不到流程分析

以下是針對 yum list available -c xxx.repo&#xff08;對應 DNF 的命令行操作&#xff09;的詳細流程解讀&#xff0c;包括參數解析、配置初始化、元數據加載、數據庫查詢&#xff0c;以及讀取不到特定包的場景分析。 1. 命令行參數解析與入口函數 代碼入口: dnf.cli.main.m…

k8s 1.23升級1.24

0、簡介 這里只用3臺服務器來做一個簡單的集群&#xff0c;當前版本是1.23.17目標升級到1.24.17 地址主機名192.168.160.40kuber-master-1192.168.160.41kuber-master-2192.168.160.42kuber-node-1 我這里設置的master2可調度pod&#xff0c;將master2的污點去掉 kubectl de…

# 實時人臉識別系統:基于 OpenCV 和 Python 的實現

實時人臉識別系統&#xff1a;基于 OpenCV 和 Python 的實現 在當今數字化時代&#xff0c;人臉識別技術已經廣泛應用于各種場景&#xff0c;從手機解鎖到安防監控&#xff0c;再到智能門禁系統。今天&#xff0c;我將通過一個完整的代碼示例&#xff0c;詳細講解如何使用 Pyt…

Linux:(五種IO模型)

目錄 一、對IO的重新認識 二、IO的五種模型 1.阻塞IO 2.非阻塞IO 3.信號驅動IO 4.IO多路轉接 5.異步IO 6.一些概念的解釋 三、非阻塞IO的代碼實現 1.fcntl 2.實現主程序 一、對IO的重新認識 如果有人問你IO是什么&#xff0c;你該怎么回答呢&#xff1f; 你可能會說…

將電腦控制手機編寫為MCP server

文章目錄 電腦控制手機后,截屏代碼復習MCP server構建修改MCP的config文件測試效果困惑電腦控制手機后,截屏代碼復習 def capture_window(hwnd: int, filename: str = None) -> dict:""&

[ctfshow web入門] web6

前置知識 入口點(目錄)爆破 還記得之前說過網站的入口的嗎&#xff0c;我們輸入url/xxx&#xff0c;其中如果url/xxx存在&#xff0c;那么訪問成功&#xff0c;證明存在這樣一個入口點&#xff1b;如果訪問失敗則證明不存在此入口點。所以我們可以通過遍歷url/xxx&#xff0c;…