描述

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P mod 1000000007

数据范围: 对于 50% 的数据, size≤104 size≤10^4 size104,对于100% 的数据, size≤105size≤10^5size105数组中所有数字的值满足 0≤val≤1090≤val≤10^90val109
要求:空间复杂度 O(n)O(n)O(n),时间复杂度 O(nlogn)O(nlogn)O(nlogn)

输入描述:
题目保证输入的数组中没有的相同的数字

示例1
输入:[1,2,3,4,5,6,7,0]
返回值:7

示例2
输入:[1,2,3]
返回值:0

方法一:暴力方法

对于此题,按住一个arr[i], 依次判断{i+1 … n-1]是否满足条件。n为数组的大小。

class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param nums int整型vector* @return int整型*/const int m_nMod= 1000000007;int InversePairs(vector<int>& nums) {// write code hereint res = 0;for(int i = 0; i < nums.size();++i){for(int j = i + 1;j < nums.size(); ++j){if(nums.at(i) > nums.at(j)){res += 1;res %= m_nMod;}}}return res;}
};

方法二:归并排序思想

方法思路

  • ​​分治策略​​:使用归并排序的思想,将数组分成两个子数组,分别递归排序并统计子数组内的逆序对数量。
  • ​​合并阶段统计逆序对​​:在合并两个有序子数组时,如果左子数组的当前元素大于右子数组的当前元素,则左子数组中当前元素及其之后的所有元素均能与右子数组的当前元素形成逆序对。
  • ​​辅助数组​​:使用一个辅助数组在合并过程中存储排序后的结果,以避免频繁创建新数组。
  • ​​取模运算​​:由于逆序对数量可能很大,每次累加后都需对 1000000007 取模,防止溢出。
class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param nums int整型vector * @return int整型*/const int m_nMod = 1000000007;int mergeSort(vector<int>& nums, vector<int>& tmp, int l, int r){if (l >= r) return 0;  // 递归终止:子数组长度为0或1int mid = l + (r - l) / 2;  // 防溢出计算中点long long count = 0;// 递归处理左右子数组并累加逆序对数count = (count + mergeSort(nums, tmp, l, mid)) % m_nMod;count = (count + mergeSort(nums, tmp, mid + 1, r)) % m_nMod;// 合并有序子数组并统计跨区逆序对int i = l, j = mid + 1, k = l;while (i <= mid && j <= r){if (nums[i] <= nums[j]){tmp[k++] = nums[i++];  // 无逆序对}else{tmp[k++] = nums[j++];// 关键:左半部分剩余元素均与nums[j]构成逆序对count = (count + (mid - i + 1)) % m_nMod;}}// 处理剩余元素while (i <= mid) tmp[k++] = nums[i++];while (j <= r) tmp[k++] = nums[j++];// 将排序结果复制回原数组for (int idx = l; idx <= r; ++idx) {nums[idx] = tmp[idx];}return count % m_nMod;}int InversePairs(vector<int>& nums) {// write code hereif (nums.empty()) return 0;vector<int> tmp(nums.size());return mergeSort(nums, tmp, 0, nums.size() - 1);}
};

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

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

相关文章

Linux 日志管理与时钟同步详解

Linux 日志管理与时钟同步详解 一、日志管理 1. 日志服务概述 Linux 系统中主要有两种日志服务&#xff0c;分别负责临时和永久日志的管理&#xff1a; systemd-journald&#xff1a;存储临时日志&#xff0c;服务器重启后日志会丢失&#xff0c;无需手动配置rsyslog&#xff1…

个人如何做股指期货?

本文主要介绍个人如何做股指期货&#xff1f;个人参与股指期货交易需要遵循一定的流程和规则&#xff0c;同时需充分了解其高风险、高杠杆的特点&#xff0c;并做好风险管理。个人如何做股指期货&#xff1f;一、了解股指期货基础股指期货是以股票价格指数为标的物的金融期货合…

设计模式-单例模式 Java

模式概述 单例模式&#xff08;Singleton Pattern&#xff09;是设计模式中最基础但应用最广泛的创建型模式之一&#xff0c;确保一个类仅有一个实例&#xff0c;并提供一个全局访问点。这种模式在需要全局唯一对象的场景中至关重要&#xff0c;如配置管理、线程池、数据库连接…

RFID 系统行业前沿洞察:技术跃迁与生态重构

在物联网与人工智能深度融合的时代&#xff0c;RFID&#xff08;射频识别&#xff09;系统正经历从 “单品识别工具” 到 “智能决策中枢” 的范式转变。这一技术凭借其非接触式数据采集、环境适应性强、全生命周期追溯等特性&#xff0c;在医疗、制造、农业、环保等领域引发连…

实现implements InitializingBean, DisposableBean 有什么用

在 Spring 框架中&#xff0c;实现 InitializingBean 和 DisposableBean 接口用于管理 Bean 的生命周期回调&#xff0c;分别控制 Bean 的初始化后和销毁前行为。具体作用如下&#xff1a;1. InitializingBean 接口public interface InitializingBean {void afterPropertiesSet…

GitLab 18.2 发布几十项与 DevSecOps 有关的功能,可升级体验【一】

沿袭我们的月度发布传统&#xff0c;极狐GitLab 发布了 18.2 版本&#xff0c;该版本带来了议题和任务的自定义工作流状态、新的合并请求主页、新的群组概览合规仪表盘、下载安全报告的 PDF 导出文件、中心化的安全策略管理&#xff08;Beta&#xff09;等几十个重点功能的改进…

如何快速把Clickhouse数据同步到Mysql

直接使用Clickhouse官方支持的Mysql引擎表的方式&#xff01; 一、首先创建Mysql引擎表&#xff1a; CREATE TABLE saas_analysis.t_page_view_new_for_write (id Int64,shop_id Nullable(Int64),session_id Nullable(String),client_id Nullable(String),one_id Nullable(Str…

Kafka 重复消费与 API 幂等消费解决方案

Kafka 是一个高性能的分布式消息系统&#xff0c;但消费者重启、偏移量&#xff08;offset&#xff09;未正确提交或网络问题可能导致重复消费。API 幂等性设计则用于防止重复操作带来的副作用。本文从 Kafka 重复消费和 API 幂等性两个方面提供解决方案&#xff0c;重点深入探…

win11推迟更新

1、按住WINR2、输入以下命令&#xff1a;reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v FlightSettingsMaxPauseDays /t reg_dword /d 10000 /f3、点击确定4、打开搜索框5、在搜索框里边输入更新&#xff0c;选择检查更新6、在暂停…

【uniapp】---- 使用 uniapp 实现视频和图片上传且都可以预览展示

1. 前言 接手得 uniapp 开发的微信小程序项目,新的开发需求是需要同时上传图片和视频,但是之前的上传都没有进行封装,都是每个页面需要的时候单独实现,现在新的需求,有多个地方都需要上传图片、视频或语音等,这样就需要封装一个组件,然后发现部分地方使用了 uni-file-p…

(nice!!!) (LeetCode 每日一题) 2411. 按位或最大的最小子数组长度(位运算+滑动窗口)

2411. 按位或最大的最小子数组长度 思路&#xff1a;位运算滑动窗口&#xff0c;时间复杂度0(n*32)。 **遍历每一个元素nums[i]&#xff0c;然后看能否改变它前面的元素nums[j]&#xff08; j<i &#xff09;&#xff0c; 当(nums[j]|nums[i])nums[j]时&#xff0c;说明当前…

算法竞赛阶段二-数据结构(36)数据结构双向链表模拟实现

//#include<bits/stdc.h> #include<iostream> using namespace std; const int N1e510; //定义 int e[N],pre[N],ne[N],h,id; int mp[N]; //头插 // 兵 y // x void push_front (int x) {id;e[id]x;mp[x]id;pre[id]h;ne[id]ne[h];//先修改新节点…

津发科技带你了解皮肤电信号中的SCL与SCR

皮肤电&#xff08;Electrodermal Activity, EDA&#xff09;作为一种非常容易获取的基本生理信号&#xff0c;可以很好地量化我们的情绪反应&#xff0c;被广泛应用于情感识别研究中。它代表机体受到刺激时皮肤电传导的变化。皮肤电反应作为交感神经系统功能的直接指标&#x…

spark的broadcast variables

在 Spark 中&#xff0c;广播变量&#xff08;Broadcast Variables&#xff09; 是一种特殊类型的共享变量&#xff0c;用于高效地在集群中的所有节点间分发大型只读数据集。它解决了 Spark 任务中频繁传输重复数据的性能问题&#xff0c;特别适用于需要在多个任务中重用相同数…

Python爬虫实战:研究Haul库相关技术构建电商数据采集与分析系统

1. 引言 1.1 研究背景与意义 随着电子商务的迅速发展,电商平台上的商品数据呈现爆炸式增长。这些数据蕴含着丰富的商业价值,如消费者行为分析、市场趋势预测、竞争对手监测等。然而,如何从海量的电商数据中获取有价值的信息,成为当前电商企业面临的重要挑战。 网络爬虫技…

Java:高频面试知识分享1

一、Java 语言核心特性&#xff08;面向对象编程&#xff09;核心知识点梳理&#xff1a;面向对象三大特性&#xff1a;封装&#xff1a;隐藏对象内部实现&#xff0c;通过 public 方法暴露接口&#xff08;例&#xff1a;类的 private 字段 get/set 方法&#xff09;。继承&a…

MybatisPlus-核心功能

目录 条件构造器 QueryWrapper UpdateWrapper LambdaQueryWrapper 自定义SQL 基本用法 多表关联 Service接口 CRUD 基本用法 Lambda 批量新增 条件构造器 除了新增以外&#xff0c;修改、删除、查询的SQL语句都需要指定where条件。因此BaseMapper中提供的相关方法…

RHCE综合项目:分布式LNMP私有博客服务部署

一、项目概述本次项目基于LNMP&#xff08;linux&#xff0c;nginx&#xff0c;mariadb&#xff0c;php&#xff09;搭建了一个私有的博客平台&#xff0c;本篇博客详细记录了该博客平台的服务部署全流程。在该项目中&#xff0c;使用了两台linux&#xff08;openeuler&#xf…

5种安全方法:如何删除三星手机上的所有内容

随着新的三星设备不断推出&#xff0c;在出售或捐赠旧手机之前&#xff0c;彻底清除旧手机上的数据以保护隐私至关重要。许多人不知道的是&#xff0c;简单的删除操作并不能完全清除三星设备上的数据&#xff0c;被删除的文件可能会处于不可见状态。本文介绍了如何彻底删除三星…

Vue 3 入门教程 2- Vue 组件基础与模板语法

一、Vue 组件基础在 Vue 中&#xff0c;组件是构建用户界面的基本单位&#xff0c;它可以将页面拆分成多个独立、可复用的部分。一个 Vue 组件通常以 .vue 文件名结尾&#xff0c;包含三个核心部分&#xff1a;模板&#xff08;Template&#xff09;、脚本&#xff08;Script&a…