当前位置: 首页 > news >正文

leetCode 493 翻转对 归并分治 + 图解

493. 翻转对 - 力扣(LeetCode)


给定一个数组 nums ,如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对。你需要返回给定数组中的重要翻转对的数量。


  • "小和"问题是,当我 j 来到一个位置的时候,你的左侧 i 去给我划答案
  • "翻转对"问题是,当我 i 来到一个位置的时候,你的右侧 j 去给我划答案 

class Solution {
public:int merge(vector<int>&arr, int left, int mid, int right) {int n = right - left + 1;//vector<int> help(n, 0);int* help = new int[n]();// 统计部分int ans = 0;for (int i = left, j = mid + 1; i <= mid; i++) {// 求"翻转对"问题是,当我i来到一个位置的时候,你的右侧j去给我划答案while (j <= right && (long)arr[i] > (long)arr[j] * 2) {j++;}ans += j - mid - 1;}// 正常mergeint i = 0,a = left, b = mid + 1;while (a <=mid && b <= right) help[i++] = arr[a] <= arr[b] ? arr[a++] : arr[b++];while (a <= mid) help[i++] = arr[a++];while (b <= right) help[i++] = arr[b++];for (int i = 0; i < n; i++) arr[i + left] = help[i];delete[] help;return ans;}// 统计left...right范围上,翻转对的数量,同时left...right范围上统计完后变有序int counts(vector<int>& arr, int left, int right) {if (left == right) return 0;// int mid = (left + right) / 2;int mid = left + ((right - left) >> 1);return counts(arr, left, mid) + counts(arr, mid + 1, right) + merge(arr, left, mid, right);}int reversePairs(vector<int> arr) {int n = arr.size();return counts(arr, 0, n - 1);}
};

我的往期文章:

归并排序 图解 递归 + 非递归 + 笔记-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_41987016/article/details/134338789?spm=1001.2014.3001.5501 归并分治 归并排序的应用 + 图解 + 笔记-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_41987016/article/details/134340208?spm=1001.2014.3001.5501

归并排序 merge Sort + 图解 + 递归 / 非递归-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_41987016/article/details/134347278?spm=1001.2014.3001.5501参考和推荐视频:

算法讲解022【必备】归并分治_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1L14y1B7ef/?spm_id_from=333.788.recommend_more_video.0&vd_source=a934d7fc6f47698a29dac90a922ba5a3

相关文章:

  • Redis系列-四种部署方式-单机部署+主从模式+哨兵模式【7】
  • (层次遍历)104. 二叉树的最大深度
  • pytorch DistributedDataParallel 分布式训练踩坑记录
  • 【问题记录】docker pull 镜像的时候 devel 版本和无 devel 版本的差别
  • 使用 eBPF检测 mmap泄露
  • 【电路笔记】-节点电压分析和网状电流分析
  • EDA实验----四选一多路选择器设计(QuartusII)
  • Java中单例模式
  • Echarts柱状体实现滚动条动态滚动
  • Spring源码系列-框架中的设计模式
  • [工业自动化-11]:西门子S7-15xxx编程 - PLC从站 - 分布式IO从站/从机
  • 【C++笔记】优先级队列priority_queue的模拟实现
  • 原型模式(创建型)
  • 解析html生成Word文档
  • 总结:利用原生JDK封装工具类,解析properties配置文件以及MF清单文件
  • ES学习笔记(12)--Symbol
  • JDK9: 集成 Jshell 和 Maven 项目.
  • js正则,这点儿就够用了
  • Meteor的表单提交:Form
  • Nacos系列:Nacos的Java SDK使用
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • TypeScript实现数据结构(一)栈,队列,链表
  • vuex 学习笔记 01
  • vue脚手架vue-cli
  • 基于组件的设计工作流与界面抽象
  • 模型微调
  • 爬虫模拟登陆 SegmentFault
  • 数组大概知多少
  • 我的zsh配置, 2019最新方案
  • 一道闭包题引发的思考
  • 一个JAVA程序员成长之路分享
  • 一些关于Rust在2019年的思考
  • 译有关态射的一切
  • 译自由幺半群
  • 原生Ajax
  • 责任链模式的两种实现
  • 阿里云服务器如何修改远程端口?
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (剑指Offer)面试题34:丑数
  • (蓝桥杯每日一题)love
  • (三) diretfbrc详解
  • (三)docker:Dockerfile构建容器运行jar包
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (五)c52学习之旅-静态数码管
  • (转)【Hibernate总结系列】使用举例
  • (转)Linux下编译安装log4cxx
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • ***测试-HTTP方法
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET中的Exception处理(C#)