【刷题篇】分治-归并排序
文章目录
- 1、排序数组
- 2、交易逆序对的总数
- 3、计算右侧小于当前元素的个数
- 4、翻转对
1、排序数组
给你一个整数数组 nums,请你将该数组升序排列。
class Solution {
public:vector<int> tmp;void mergeSort(vector<int>& nums,int left,int right){if(left>=right)return ;int mid=(left+right)>>1;//对于非负整数,并且不产生溢出的情况下,//(left + right) >> 1 和 (left+right)/2是等价的。mergeSort(nums,left,mid);mergeSort(nums,mid+1,right);int cur1=left,cur2=mid+1;int i=0;while(cur1<=mid&&cur2<=right){if(nums[cur1]<nums[cur2]) tmp[i++]=nums[cur1++];else tmp[i++]=nums[cur2++];}//处理没有结束的while(cur1<=mid) tmp[i++]=nums[cur1++];while(cur2<=right) tmp[i++]=nums[cur2++]; for(int i=left;i<=right;i++)nums[i]=tmp[i-left];}vector<int> sortArray(vector<int>& nums) {tmp.resize(nums.size());mergeSort(nums,0,nums.size()-1);return nums;}
};
2、交易逆序对的总数
在股票交易中,如果前一天的股价高于后一天的股价,则可以认为存在一个「交易逆序对」。请设计一个程序,输入一段时间内的股票交易记录 record,返回其中存在的「交易逆序对」总数。
class Solution {
public:int tmp[50010];int mergeSort(vector<int>& nums,int left,int right){if(left>=right)return 0;int ret=0;//计数int mid=(left+right)>>1;ret+=mergeSort(nums,left,mid);ret+=mergeSort(nums,mid+1,right);int cur1=left,cur2=mid+1;int i=0;while(cur1<=mid&&cur2<=right){if(nums[cur1]<=nums[cur2])tmp[i++]=nums[cur1++];else{ret+=mid-cur1+1;tmp[i++]=nums[cur2++];}}//处理没有结束的while(cur1<=mid) tmp[i++]=nums[cur1++];while(cur2<=right) tmp[i++]=nums[cur2++]; for(int i=left;i<=right;i++)nums[i]=tmp[i-left];return ret;}int reversePairs(vector<int>& record) {return mergeSort(record,0,record.size()-1);}
};
3、计算右侧小于当前元素的个数
给你一个整数数组 nums ,按要求返回一个新数组 counts 。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。
class Solution {
public:vector<int> ret;vector<int> index; // 记录 nums 中当前元素的原始下标int tmpNums[500010];int tmpIndex[500010];vector<int> countSmaller(vector<int>& nums) {ret.resize(nums.size());index.resize(nums.size());for(int i=0;i<nums.size();i++)index[i]=i;mergeSort(nums,0,nums.size()-1);return ret;}void mergeSort(vector<int>& nums,int left,int right){if(left>=right)return;int mid=(left+right)>>1;mergeSort(nums,left,mid);mergeSort(nums,mid+1,right);int cur1=left,cur2=mid+1,i=0;while(cur1<=mid&&cur2<=right){if(nums[cur1]<=nums[cur2]){tmpNums[i]=nums[cur2];tmpIndex[i++]=index[cur2++];}else{ret[index[cur1]]+=right-cur2+1;tmpNums[i]=nums[cur1];tmpIndex[i++]=index[cur1++];}}while(cur1<=mid){tmpNums[i]=nums[cur1];tmpIndex[i++]=index[cur1++];}while(cur2<=right){tmpNums[i]=nums[cur2];tmpIndex[i++]=index[cur2++];}for(int i=left;i<=right;i++){nums[i]=tmpNums[i-left];index[i]=tmpIndex[i-left];}}
};
4、翻转对
给定一个数组 nums ,如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对。
你需要返回给定数组中的重要翻转对的数量。
class Solution {
public:int tmp[50010];int ret=0;int reversePairs(vector<int>& nums) {mergeSort(nums,0,nums.size()-1);return ret; }void mergeSort(vector<int>& nums,int left,int right){if(left>=right)return;int mid=(left+right)>>1;mergeSort(nums,left,mid);mergeSort(nums,mid+1,right);int cur1=left,cur2=mid+1,i=0;while(cur1<=mid&&cur2<=right){if(nums[cur1]/2.0<=nums[cur2])cur2++;else{ret+=right-cur2+1;cur1++;}}//排序是要按大小进行的并不是if(nums[cur1]/2.0<=nums[cur2]),所以就不能在一起排序,要分开cur1=left,cur2=mid+1,i=0;while(cur1<=mid&&cur2<=right){if(nums[cur1]<=nums[cur2])tmp[i++]=nums[cur2++];elsetmp[i++]=nums[cur1++];}while(cur1<=mid)tmp[i++]=nums[cur1++];while(cur2<=right)tmp[i++]=nums[cur2++];for(int i=left;i<=right;i++)nums[i]=tmp[i-left];}
};
相关文章:
【刷题篇】分治-归并排序
文章目录 1、排序数组2、交易逆序对的总数3、计算右侧小于当前元素的个数4、翻转对 1、排序数组 给你一个整数数组 nums,请你将该数组升序排列。 class Solution { public:vector<int> tmp;void mergeSort(vector<int>& nums,int left,int right){…...
【经验】Ubuntu上离线安装VsCode插件浏览Linux kernel源码
1、下载VsCode离线安装包 1.1 下载 下载地址:https://marketplace.visualstudio.com/vscode 本人安装的插件: C/C++ checkpatch Chinese clangd kconfig Makefile Tools Perl Perl Toolbox注意:C/C++插件要安装Linux 64版本 1.2 安装 将离线安装包拷贝到Ubuntu中,执…...
鼠标侧键映射虚拟桌面切换 —— Win11
鼠标侧键映射虚拟桌面切换 —— Win11 基于 AutoHotkey 实现功能 下载软件 AutoHotkey建议安装在默认路径下(C盘) 此软件非常小,几乎不占用资源软件安装在默认路径以外的位置可能导致部分功能不可用 新建一个 .ahk 文件使用记事本打开该 .a…...
2024全国大学生数据统计与分析竞赛B题【电信银行卡诈骗的数据分析】思路详解
电信诈骗是指通过电话、网络和短信方式,编造虚假信息,设置骗局,对受害人实施远程、非接触式诈骗,诱使受害人打款或转账的犯罪行为,通常以冒充他人及仿冒、伪造各种合法外衣和形式的方式达到欺骗的目的,如冒…...
鸿蒙emitter 订阅事件封装 EmitterUtils
适用于api11 和api12 废话不多说,直接上代码 import emitter from ohos.events.emitter; import { StringUtils } from ohos/flutter_ohos;export class EmitterUtils{/*** 发射字符串类型的* param eventId* param data*/public static sendEvent(eventId:stri…...
C语言---深入指针(4)
回调函数 //回调函数就是通过函数指针调用的函数 //这个在之前的转移表-计算器里面很明显,通过函数指针数组内的函数指针进行函数的调用 // // // 将这四段代码分装成一个函数,一个代码将这4个问题都解决 int Add(int x, int y) {return x y; } int S…...
【启程Golang之旅】让文件操作变得简单
欢迎来到Golang的世界!在当今快节奏的软件开发领域,选择一种高效、简洁的编程语言至关重要。而在这方面,Golang(又称Go)无疑是一个备受瞩目的选择。在本文中,带领您探索Golang的世界,一步步地了…...
oracle视图无法删除,orcl视图删除卡住怎么办
话说,这是一个来自周四加班夜晚的故事,当时我的PL/SQL卡住了,每次查询这个表时都会卡住。 经过一番研究,我找到了解决办法,分为三个步骤: 使用以下查询语句获取正在执行的SQL查询的SID和OracleID…...
ug编程怎么录制宏:一步步探索自动化编程的奥秘
ug编程怎么录制宏:一步步探索自动化编程的奥秘 在UG编程的浩瀚领域中,录制宏是一项强大而神秘的功能。它就像一位魔法师,能够将繁琐的重复操作化为简单的指令,释放出惊人的编程效率。然而,对于许多初学者来说…...
深度学习Week16——数据增强
文章目录 深度学习Week16——数据增强 一、前言 二、我的环境 三、前期工作 1、配置环境 2、导入数据 2.1 加载数据 2.2 配置数据集 2.3 数据可视化 四、数据增强 五、增强方式 1、将其嵌入model中 2、在Dataset数据集中进行数据增强 六、训练模型 七、自定义增强函数 一、前言…...
python-自幂数判断
[题目描述]: 自幂数是指,一个N 位数,满足各位数字N 次方之和是本身。例如,153153 是 33 位数,其每位数的 33 次方之和,135333153135333153,因此 153153 是自幂数;16341634 是 44 位数…...
RocketMQ教程(三):RocketMQ的核心组件
四个核心组件 RocketMQ 的架构采用了典型的分布式系统设计理念,以确保高性能、高可用和可扩展性。RocketMQ 主要由四个核心组件构成:NameServer、Broker、Producer 和 Consumer。下面是对这些组件以及它们在 RocketMQ 中的角色和功能的概述: 1. NameServer 角色和功能:Name…...
46.SQLserver中按照多条件分组:查询每个地方的各种水果的种植数量,新增时,一个地方同时有几种水果,只插入一条记录,同时多种水果之间使用|隔开
1.SQLserver中按照多条件分组 ,分组条件包括(一个字段使用|进行分割,如:apple|orange,查询时,apple和orange分别对应一条数据) 例如:SQL如下: SELECT FROM ( SELECT CDFBM 地方编码…...
C盘满了怎么办,Windows11的C盘没有磁盘清理选项怎么办,一次搞定
问题: 太久没清电脑了,满的跟垃圾堆一样。。。C盘红色看上去很不妙。 一. C盘满了怎么办: 1. 删除临时文件 找到 C:\Windows\Temp,进入Temp资料夹,选中所有文件夹和文件,按下ShiftDelete键,彻…...
「动态规划」当小偷改行去当按摩师,会发生什么?
一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),…...
Python | 排队取奶茶
队列的基本概念(队头、队尾)和特点(先入先出) 在 Python 语言中,标准库中的queue模块提供了多种队列的实现,比如普通队列和优先级队列,因此你可以使用queue.Queue类来创建队列,不过…...
mysql当前状态分析(show status)
文章目录 查看当前线程数据查询连接情况查询缓存相关查询锁相关查询增删改查执行次数查询DDL创建相关 SHOW STATUS 是一个在 MySQL 中用来查看服务器运行状态的命令。它可以帮助你了解服务器的当前性能,包括连接数、表锁定、缓冲区使用情况等信息。 查看当前线程数据…...
Google Earth Engine(GEE)——使用机器学习进行金三角大米分布图
第 1 步:转到https://code.earthengine.google.com/打开代码编辑器 第 2 步:使用以下代码从 Google Earth Engine Asset 导入数据 // 导入影像集合 var composites = ee.ImageCollection("projects/servir-mekong/yearlyComposites"); // 导入训练数据 var data …...
MyBatis一级和二级缓存介绍
MyBatis是一个持久层框架,它提供了一级缓存和二级缓存来提高数据库操作的性能。下面是一级缓存和二级缓存的区别理解、画图和知识点总结: 一级缓存: 一级缓存是MyBatis默认开启的缓存层,它是SqlSession级别的缓存,也…...
PowerDesigner遍历导出所有表结构到Excel
PowerDesigner遍历导出所有表到Excel 1.打开需要导出表结构到Excel的pdm文件 2.点击Tools|Execute Commands|Edit/Run Script菜单或按下快捷键Ctrl Shift X打开脚本窗口,输入示例VBScript脚本,修改其中的Excel模板路径及工作薄页签,点Run…...
JavaSE——抽象类和接口
目录 一 .抽象类 1.抽象类概念 2.抽象类语法 3.抽象类特性 4.抽象类的作用 二. 接口 1.接口的概念 2.语法规则 3.接口的使用 4.接口特性 5.实现多个接口 6.接口间的继承 三.抽象类和接口的区别 一 .抽象类 1.抽象类概念 在面向对象的概念中,所有的对…...
生成式人工智能 - stable diffusion web-ui安装教程
一、Stable Diffusion WEB UI 屌丝劲发作了,所以本地调试了Stable Diffusion之后,就去看了一下Stable Diffusion WEB UI,网络上各种打包套件什么的好像很火。国内的也就这个层次了,老外搞创新,国内跟着屁股后面搞搞应用层,就叫大神了。 不扯闲篇了,我们这里从git源码直接…...
11-Linux文件系统与日志分析
11.1深入理解Linux文件系统 在处理Liunx系统出现故障时,故障的症状是最易发现。数学LInux系统中常见的日志文件,可以帮助管理员快速定位故障点,并及时解决各种系统问题。 11.1.1 inode与block详解 文件系统通常会将这两部分内容分别存放在…...
mac M1下安装PySide2
在M1下装不了PySide2, 是因为PySide2没有arm架构的包 1 先在M1上装qt5 安装qt主要是为了能用里面的Desinger, uic, rcc brew install qt5 我装完的路径在/opt/homebrew/opt/qt5 其中Designer就是用来设计界面的 rcc用resource compiler, 编绎rc资源文件的, 生成对应的py文件…...
超详解——识别None——小白篇
目录 1. 内建类型的布尔值 2. 对象身份的比较 3. 对象类型比较 4. 类型工厂函数 5. Python不支持的类型 总结: 1. 内建类型的布尔值 在Python中,布尔值的计算遵循如下规则: None、False、空序列(如空列表 [],空…...
C++的MQTT开发:使用Paho的C++接口实现消息发布、订阅、连接RabbitMQ
C Paho实现MQTT消息发布功能 要使用paho的cpp接口实现发布MQTT消息的功能,需要进行以下步骤: 安装paho库:首先从paho官方网站下载并安装paho的C库。可以从https://www.eclipse.org/paho/clients/cpp/ 下载适合操作系统的版本。 创建MQTT客户…...
深度网络学习笔记(二)——Transformer架构详解(包括多头自注意力机制)
Transformer架构详解 前言Transformer的整体架构多头注意力机制(Multi-Head Attention)具体步骤1. 步骤12. 步骤23. 步骤34. 步骤4 Self-Attention应用与比较Self-Attention用于图像处理Self-Attention vs. CNNSelf-Attention vs. RNN Transformer架构详…...
Python 快速查找并替换Excel中的数据
Excel中的查找替换是一个非常实用的功能,能够帮助用户快速完成大量数据的整理和处理工作,避免手动逐一修改数据的麻烦,提高工作效率。要使用Python实现这一功能, 我们可以借助Spire.XLS for Python 库,具体操作如下&am…...
KafkaStream Local Store和Global Store区别和用法
前言 使用kafkaStream进行流式计算时,如果需要对数据进行状态处理,那么常用的会遇到kafkaStream的store,而store也有Local Store以及Global Store,当然也可以使用其他方案的来进行状态保存,文本主要理清楚kafkaStream…...
PowerDesigner导入Excel模板生成数据表
PowerDesigner导入Excel模板生成数据表 1.准备好需要导入的Excel表结构数据,模板内容如下图所示 2.打开PowerDesigner,新建一个physical data model文件,填入文件名称,选择数据库类型 3.点击Tools|Execute Commands|Edit/Run Script菜单或按下快捷键Ctrl Shift X打开脚本窗口…...
中山地区做网站公司/acca少女网课视频
工作过程中有时候会接收到数据库服务器器load 飙高的报警,比如: load1 15.25 base: 8.52,collect time:2014-08-30 如何处理load 异常飙高的报警呢? 本文尝试从原理,原因,解决方法来阐述这类问题的解决思路。 一 原理分析 CPU作为…...
电影网站 备案/高端seo服务
为网站或应用程序开发选择正确的编程语言一直很麻烦。当谈到在 NextJS 和 React 等两种很棒的编程语言之间进行选择时,这是值得商榷的。这两种工具都最适合创建 Web 应用程序。 在本文中,你将了解 NextJS 和 React 之间的区别,以及哪个…...
网站设计建设趋势/苏州网站开发公司
互联网的兴起现在已经成为当今世界的主流媒体和信息传播媒介,做为互联网的应用各个终端用户是组成这一互联网世界的主体。如何行之有效的进行互联网的接入和应用成为了一个主要的问题。 小区宽带运营就此出现,做为新兴的网络接入运营模式。小区宽带运营在…...
哪些b2b网站做游戏机比较好/seo高级优化方法
1、首先他们底层数据结构不一样,ArrayList底层结构是数组,LinkedList底层结构是链表; 2、数据结构决定了,ArrayList在查询上的效率较高,而LinkedList在删除和添加上的效率更高;(需要注意的一点是…...
泰安做网站公司哪家好/seo顾问服务 乐云践新专家
目录注释变量和常量标识符的命名规范字符串输出键盘输入数据类型整数类型浮点类型字符类型布尔类型Unit类型,Null类型和Nothing类型(重点)Unit类型Null类型Nothing类型类型转换数值类型自动转换强制类型转换注释 scala的注释的使用跟JAVA是一…...
免费好用的网页制作工具/关键词优化精灵
作者:雷远缘 编辑:毕小烦 一. 先知道小程序是什么 啥是小程序? “小程序是一种不需要下载安装即可使用的应用,它实现了应用 “触手可及” 的梦想,用户扫一扫或者搜一下即可打开应用。也体现了 “用完即走” 的理念&am…...