分治-归并系列一>翻转对

目录

  • 题目:
  • 解析:
    • 策略一:
  • 代码:
    • 策略二:
  • 代码:

题目:

链接: link
在这里插入图片描述


这题和逆序对区别点就是,要找到前一个元素是后一个元素的2倍
先找到目标值再,继续堆排序

解析:

策略一:

这里是引用

代码:

class Solution {int[] tmp;public int reversePairs(int[] nums) {int n = nums.length;tmp = new int[n];return mergesort(nums,0,n-1);}private int mergesort(int[] nums, int left, int right){int ret = 0;if(left >= right) return 0;int mid = (right + left) / 2;//左右两边找翻转对ret += mergesort(nums,left,mid);ret += mergesort(nums,mid+1,right);//一左一右找翻转对: 降序版本//输入数组中的所有数字都在32位整数的表示范围内:改为:2.0*nums[cur2]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(cur2 > right) break;}//排序:cur1 = left; cur2 = mid+1;while(cur1 <= mid && cur2 <= right) tmp[i++] = nums[cur1] <= nums[cur2]? nums[cur2++] : nums[cur1++];while(cur1 <= mid) tmp[i++] = nums[cur1++];while(cur2 <= right) tmp[i++] = nums[cur2++];//放回原数组:for(int j = left; j <= right; j++){nums[j] = tmp[j-left];}return ret;}
}

策略二:

这里是引用

代码:

class Solution {int[] tmp;public int reversePairs(int[] nums) {int n = nums.length;tmp = new int[n];return mergesort(nums,0,n-1);}一左一右找翻转对: 升序版本:private int mergesort(int[] nums, int left, int right){int ret = 0;if(left >= right) return 0;int mid = (right + left) / 2;//左右两边找翻转对ret += mergesort(nums,left,mid);ret += mergesort(nums,mid+1,right);//一左一右找翻转对: 升序版本//输入数组中的所有数字都在32位整数的表示范围内:改为:2.0*nums[cur2]int cur1 = left, cur2 = mid+1, i = 0;while(cur1 <= mid && cur2 <= right){if(nums[cur1] / 2.0 <= nums[cur2]){cur1++;}else {ret += mid - cur1 + 1;cur2++;}if(cur1 > mid) break;}//排序:cur1 = left; cur2 = mid+1;while(cur1 <= mid && cur2 <= right) tmp[i++] = nums[cur1] <= nums[cur2]? nums[cur1++] : nums[cur2++];while(cur1 <= mid) tmp[i++] = nums[cur1++];while(cur2 <= right) tmp[i++] = nums[cur2++];//放回原数组:for(int j = left; j <= right; j++){nums[j] = tmp[j-left];}return ret;}
}

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

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

相关文章

从0到1打造一套适合自己接单的脚手架05自动化创建表

上一篇我们是手动创建的表&#xff0c;感觉不方便&#xff0c;后续如果要做成产品在部署的时候一个个的创建表太麻烦了&#xff0c;我们让ai来自动创建表&#xff0c;输入如下提示词 现在这种单独去navicate执行也不方便&#xff0c;我希望是有一个目录里存放的表结构的语句&a…

minio改成https+域名访问

思路有两个&#xff1a; 方式一&#xff1a;通过nginx反向代理&#xff0c;将https配置在nginx&#xff0c;内部的MinIO还是使用HTTP&#xff1b;方式二&#xff1a;MinIO服务端直接配置成HTTPS&#xff1b; 注意&#xff1a; 私钥需要命名为&#xff1a;private.key 公钥需要…

VS Code构建C/C++开发环境(Windows with MinGW and CMake)

文章目录 目的编译工具链基础开发与调试基于CMake开发与调试关于settings.json总结 目的 在Windows上进行C/C开发目前最最常用的IDE就是微软的 Visual Studio &#xff0c;只是对我来说早些年的VS实在是太卡了&#xff0c;留下了不好的印象。后来没怎么用过&#xff0c;现在下…

一组可能的机器学习问题列表

线性回归与多项式拟合的关系最小二乘法在机器学习中的应用梯度下降是如何实现的贝叶斯分类器的应用场景高斯分布与判定在哪里用到模型的评估有哪些参数误差中的偏差和方差定义训练集分组的快捷方式如何度量模型性能查准率查全率的定义roc,aux的含义正则化是什么意思k均值用来解…

linux下io操作详细解析

在 Linux 系统下&#xff0c;IO&#xff08;输入/输出&#xff09;操作是程序与外部设备&#xff08;如文件、网络等&#xff09;交互的重要方式。Linux 提供了丰富的系统调用和库函数来支持各种 IO 操作。以下是对 Linux 下 IO 操作的详细解析&#xff0c;包括文件 IO、网络 I…

wsl2+ubuntu22.04安装blender教程(详细教程)

本章教程介绍,如何在Windows操作系统上通过wsl2+ubuntu安装blender并运行教程。Blender 是一款免费、开源的 ​​3D 创作套件​​,广泛应用于建模、动画、渲染、视频编辑、特效制作等领域。它由全球开发者社区共同维护,支持跨平台(Windows、macOS、Linux),功能强大且完全…

目标检测YOLO实战应用案例100讲- 基于卷积神经网络的小目标检测算法研究与应用

目录 知识储备 基于改进YOLOv5的小目标检测算法 一、环境配置(Python 3.8+) 二、核心代码实现 1. 改进模型定义(models/yolov5s_tiny.py ) 2. 小目标数据增强(datasets/tiny_aug.py ) 3. 训练脚本(train.py ) 三、关键改进点说明 四、实验配置建议 前言 传统…

智能DNS解析:解决高防IP地区访问异常的实战指南

摘要&#xff1a;针对高防IP在部分地区无法访问的问题&#xff0c;本文设计基于智能DNS的流量调度方案&#xff0c;提供GeoDNS配置与故障切换代码示例。 一、问题背景 运营商误拦截或线路波动可能导致高防IP在福建、江苏等地访问异常。传统切换方案成本高&#xff0c;智能DNS可…

根据 PID 找到对应的 Docker 容器

引言 在日常运维与调试过程中&#xff0c;我们常常需要查找某个进程所属的 Docker 容器。当系统出现问题或资源异常时&#xff0c;根据进程的 PID 找到其所属容器可以帮助我们迅速定位问题。本文将介绍如何利用 Linux 的 cgroup 机制&#xff0c;以及 Docker 提供的工具来完成…

NO.88十六届蓝桥杯备战|动态规划-多重背包|摆花(C++)

多重背包 多重背包问题有两种解法&#xff1a; 按照背包问题的常规分析⽅式&#xff0c;仿照完全背包&#xff0c;第三维枚举使⽤的个数&#xff1b;利⽤⼆进制可以表⽰⼀定范围内整数的性质&#xff0c;转化成01 背包问题。 ⼩建议&#xff1a;并不是所有的多重背包问题都能…

【远程工具】0 std::process::Command 介绍

std::process::Command 是 Rust 标准库中用于创建和配置子进程的主要类型。它允许你启动新的进程、设置其参数和环境变量、重定向输入/输出等。 基本用法 use std::process::Command;let output Command::new("echo").arg("Hello, world!").output().ex…

【图书管理系统】深入解析基于 MyBatis 数据持久化操作:全栈开发图书管理系统获取图书列表接口(后端:计算图书页数、查询当前页展示的书籍)

图书列表 实现服务器代码(计算图书总数量查询当前页需要展示的书籍) 后端响应时&#xff0c;需要响应给前端的数据 records&#xff1a;第 pageNum 页要展示的图书有哪些&#xff08;存储到List集合中&#xff09;total&#xff1a;计算一共有多少本书&#xff08;用于告诉前…

如何在idea中快速搭建一个Spring Boot项目?

文章目录 前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热启动&#xff08;热部署&#xff09;结语 前言 Spring Boot 凭借其便捷的开发特性&#xff0c;极大提升了开发效率&#xff0c;为 Java 开发工作带来诸多便利。许多大伙伴希望快速…

制作前的关键筹备:考试考核系统之核心要点

明确系统使用目的​ 制作考试考核系统前&#xff0c;企业需明确系统使用目的&#xff0c;这是开发基石&#xff0c;不同目的决定系统功能特性。用于员工培训考核时&#xff0c;系统要与培训内容结合&#xff0c;能生成相应考题&#xff0c;检验员工知识掌握程度&#xff0c;具备…

Springboot把外部jar包打包进最终的jar包,并实现上传服务器

1、创建lib目录&#xff0c;把jar包放进这个目录下&#xff0c;然后标记lib目录为“资源根路径”&#xff08;鼠标右键lib目录->将目录标记为->资源根路径。之后lib文件夹会有如下的图标变化&#xff09; 文件结构如下&#xff1a; 2、pom文件添加依赖 <dependency…

内容中台的核心架构是什么?

数据中枢与服务API架构 在内容中台的核心架构中&#xff0c;数据中枢作为基础层&#xff0c;通过统一的数据模型与标准化接口&#xff0c;实现多源内容的集中存储与治理。其核心能力体现在对结构化与非结构化数据的清洗、分类及跨系统同步&#xff0c;例如整合企业内部的CRM、…

Light RPC:一款轻量高效的Java RPC框架实践指南

Light RPC&#xff1a;一款轻量高效的Java RPC框架实践指南 一、框架简介二、快速入门1. 环境准备2. 服务端配置2.1 添加依赖2.2 YAML配置2.3 接口与实现 3. 客户端配置3.1 添加依赖3.2 YAML配置3.3 客户端调用 三、核心设计解析四、适用场景与优势对比五、总结 一、框架简介 …

Hologres实时数仓在B站游戏的建设与实践

一、背景 实时数据仓库是近年来数据技术领域内的一大发展潮流。构建一个能够实现高吞吐量写入与更新、端到端全链路实时处理以及低延迟、高并发的实时数据仓库&#xff0c;一直是众多企业面临的重大挑战。随着B站游戏业务的快速发展&#xff0c;对数据的实时应用需求也日益增加…

Android WiFi协议之P2P介绍与实践

Android WiFi P2P WiFi P2P (Peer-to-Peer) 是 Android 提供的一种允许设备之间直接通过 WiFi 进行通信的技术&#xff0c;无需接入传统的 WiFi 网络或互联网。这种技术也被称为 WiFi Direct。 一、WiFi P2P 基本概念 1. 核心组件 P2P 设备&#xff1a;支持 WiFi P2P 的 And…

浅谈在HTTP中GET与POST的区别

从 HTTP 报文来看&#xff1a; GET请求方式将请求信息放在 URL 后面&#xff0c;请求信息和 URL 之间以 &#xff1f;隔开&#xff0c;请求信息的格式为键值对&#xff0c;这种请求方式将请求信息直接暴露在 URL 中&#xff0c;安全性比较低。另外从报文结构上来看&#xff0c…