LeetCode-315. Count of Smaller Numbers After Self
目录
题目描述
解题思路
【C++】
【Java】
复杂度分析
LeetCode-315. Count of Smaller Numbers After Self
https://leetcode.com/problems/count-of-smaller-numbers-after-self/description/
题目描述
Given an integer array nums, return an integer array counts where counts[i] is the number of smaller elements to the right of nums[i].
Example 1:
Input: nums = [5,2,6,1] Output: [2,1,1,0] Explanation: To the right of 5 there are 2 smaller elements (2 and 1). To the right of 2 there is only 1 smaller element (1). To the right of 6 there is 1 smaller element (1). To the right of 1 there is 0 smaller element.
Example 2:
Input: nums = [-1] Output: [0]
Example 3:
Input: nums = [-1,-1] Output: [0,0]
Constraints:
1 <= nums.length <= 105-104 <= nums[i] <= 104
解题思路
【C++】
class Solution {
private:vector<int> index{};vector<int> tmpIndex{};vector<int> ans{};void merge(vector<int>& nums, int start, int mid, int end) {int p1 = start, p2 = mid + 1, cur = start, len = end - start + 1;while (p1 <= mid && p2 <= end) {if (nums[index[p1]] > nums[index[p2]]) {ans[index[p1]] += end - p2 + 1;tmpIndex[cur++] = index[p1++];} else {tmpIndex[cur++] = index[p2++];}}while (p1 <= mid) {tmpIndex[cur++] = index[p1++];}while (p2 <= end) {tmpIndex[cur++] = index[p2++];}for (int i = start; i <= end; i++) {index[i] = tmpIndex[i];}}void mergeSort(vector<int>& nums, int start, int end) {if (start < end) {int mid = start + (end - start) / 2;mergeSort(nums, start, mid);mergeSort(nums, mid + 1, end);merge(nums, start, mid, end);}}public:vector<int> countSmaller(vector<int>& nums) {index.resize(nums.size());tmpIndex.resize(nums.size());ans.resize(nums.size(), 0);for (int i = 0; i < nums.size(); i++) {index[i] = i;}mergeSort(nums, 0, nums.size() - 1);return ans;}
};
【Java】
class Solution {private int[] index;private int[] tmpIndex;private List<Integer> ans;private void merge(int[] nums, int start, int mid, int end) {int p1 = start, p2 = mid + 1, cur = start, len = end - start + 1;while (p1 <= mid && p2 <= end) {if (nums[index[p1]] > nums[index[p2]]) {ans.set(index[p1], ans.get(index[p1]) + end - p2 + 1);tmpIndex[cur++] = index[p1++];} else {tmpIndex[cur++] = index[p2++];}}while (p1 <= mid) {tmpIndex[cur++] = index[p1++];}while (p2 <= end) {tmpIndex[cur++] = index[p2++];}for (int i = start; i <= end; i++) {index[i] = tmpIndex[i];}}private void mergeSort(int[] nums, int start, int end) {if (start < end) {int mid = start + (end - start) / 2;mergeSort(nums, start, mid);mergeSort(nums, mid + 1, end);merge(nums, start, mid, end);}}public List<Integer> countSmaller(int[] nums) {index = new int[nums.length];tmpIndex = new int[nums.length];ans = new ArrayList<Integer>(nums.length);for (int i = 0; i < nums.length; i++) {index[i] = i;ans.add(0);}mergeSort(nums, 0, nums.length - 1);return ans;}
}
复杂度分析
- 时间复杂度:O(nlogn),即归并排序的时间复杂度。
- 空间复杂度:O(n),这里归并排序的下标映射数组、临时下标映射数组以及答案数组的空间代价均为 O(n)。
- 注意:不建议在merge函数内创建临时下标映射数组,那样做会反复申请和销毁资源,消耗较大。
相关文章:
LeetCode-315. Count of Smaller Numbers After Self
目录 题目描述 解题思路 【C】 【Java】 复杂度分析 LeetCode-315. Count of Smaller Numbers After Selfhttps://leetcode.com/problems/count-of-smaller-numbers-after-self/description/ 题目描述 Given an integer array nums, return an integer array counts whe…...
根据导数的定义计算导函数
根据导数的定义计算导函数 1. Finding derivatives using the definition (使用定义求导)1.1. **We want to differentiate f ( x ) 1 / x f(x) 1/x f(x)1/x with respect to x x x**</font>1.2. **We want to differentiate f ( x ) x f(x) \sqrt{x} f(x)x wi…...
WPF关于打开新窗口获取数据的回调方法的两种方式
一种基于消息发送模式 一种基于回调机制 基于消息发送模式 父页面定义接收的_selectedPnNumberStandarMsg保证是唯一 Messenger.Default.Register<PlateReplaceApplyModel>(this, _selectedPnNumberStandarMsgToken, platePnNumberModel > { …...
复杂网络(四)
一、规则网络 孤立节点网络全局耦合网络(又称完全网络)星型网络一维环二维晶格 编程实践: import networkx as nx import matplotlib.pyplot as pltn 10 #创建孤立节点图 G1 nx.Graph() G1.add_nodes_from(list(range(n))) plt.figure(f…...
用MATLAB符号工具建立机器人的动力学模型
目录 介绍代码功能演示拉格朗日方法回顾求解符号表达式数值求解 介绍 开发机器人过程中经常需要用牛顿-拉格朗日法建立机器人的动力学模型,表示为二阶微分方程组。本文以一个二杆系统为例,介绍如何用MATLAB符号工具得到微分方程表达式,只需要…...
SQL优化与性能——数据库设计优化
数据库设计优化是提高数据库性能、确保数据一致性和支持业务增长的关键环节。无论是大型企业应用还是小型项目,合理的数据库设计都能够显著提升系统性能、减少冗余数据、优化查询响应时间,并降低维护成本。本章将深入探讨数据库设计中的几个关键技术要点…...
FPGA存在的意义:为什么adc连续采样需要fpga来做,而不会直接用iic来实现
FPGA存在的意义:为什么adc连续采样需要fpga来做,而不会直接用iic来实现 原因ADS111x连续采样实现连续采样功能说明iic读取adc的数据速率 VS adc连续采样的速率adc连续采样的速率iic读取adc的数据速率结论分析 FPGA读取adc数据问题一:读取adc数…...
我们来学mysql -- 事务之概念(原理篇)
事务的概念 题记一个例子一致性隔离性原子性持久性 题记 在漫长的编程岁月中,存在一如既往地贯穿着工作,面试的概念这类知识点,事不关己当然高高挂起,精准踩坑时那心情也的却是日了🐶请原谅我的粗俗,遇到B…...
基于特征子空间的高维异常检测:一种高效且可解释的方法
本文将重点探讨一种替代传统单一检测器的方法:不是采用单一检测器分析数据集的所有特征,而是构建多个专注于特征子集(即子空间)的检测器系统。 在表格数据的异常检测实践中,我们的目标是识别数据中最为异常的记录,这种异常性可以…...
看不见的彼方:交换空间——小菜一碟
有个蓝色的链接,先去看看两年前的题目的write up (https://github.com/USTC-Hackergame/hackergame2022-writeups/blob/master/official/%E7%9C%8B%E4%B8%8D%E8%A7%81%E7%9A%84%E5%BD%BC%E6%96%B9/README.md) 从别人的write up中了解到&…...
YOLO模型训练后的best.pt和last.pt区别
在选择YOLO模型训练后的权重文件best.pt和last.pt时,主要取决于具体的应用场景:12 best.pt:这个文件保存的是在训练过程中表现最好的模型权重。通常用于推理和部署阶段,因为它包含了在验证集上表现最好的模型权重&#x…...
Pareidoscope - 语言结构关联工具
文章目录 关于 Pareidoscope安装使用方法输入格式语料库查询 将语料库转换为 SQLite3 数据库两种语言结构之间的关联简单词素分析关联共现和伴随词素分析相关的更大结构可视化关联结构 关于 Pareidoscope Pareidoscope 是一组 用于确定任意语言结构之间 关联的工具,…...
GPT(Generative Pre-trained Transformer) 和 Transformer的比较
GPT(Generative Pre-trained Transformer) 和 Transformer 的比较 flyfish 1. Transformer 是一种模型架构 Transformer 是一种通用的神经网络架构,由 Vaswani 等人在论文 “Attention Is All You Need”(2017)中提…...
软件无线电(SDR)的架构及相关术语
今天简要介绍实现无线电系统调制和解调的主要方法,这在软件定义无线电(SDR)的背景下很重要。 外差和超外差 无线电发射机有两种主要架构——一种是从基带频率直接调制到射频频率(称为外差),而第二种超外差是通过两个调制阶段来实…...
Python将Excel文件转换为JSON文件
工作过程中,需要从 Excel 文件中读取数据,然后交给 Python 程序处理数据,中间需要把 Excel 文件读取出来转为 json 格式,再进行下一步数据处理。 这里我们使用pandas库,这是一个强大的数据分析工具,能够方便地读取和处理各种数据格式。需要注意的是还需要引入openpyxl库,…...
排序算法之选择排序篇
思想: 每次从未排序的部分找出最小的元素,将其放到已排序部分的末尾 从数据结构中找到最小值,放到第一位,放到最前面,之后再从剩下的元素中找出第二小的值放到第二位,以此类推。 实现思路: 遍…...
sizeof和strlen区分,(好多例子)
sizeof算字节大小 带\0 strlen算字符串长度 \0之前...
A050-基于spring boot物流管理系统设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...
[自然语言处理] NLP-RNN及其变体-干货
一、认识RNN模型 1 什么是RNN模型 RNN(Recurrent Neural Network), 中文称作循环神经网络, 它一般以序列数据为输入, 通过网络内部的结构设计有效捕捉序列之间的关系特征, 一般也是以序列形式进行输出. 一般单层神经网络结构: RNN单层网络结构: 以时间步对RNN进行展开后的单层…...
Elasticsearch ILM 索引生命周期管理讲解与实战
ES ILM 索引生命周期管理讲解与实战 Elasticsearch ILM索引生命周期管理:深度解析与实战演练1. 引言1.1 背景介绍1.2 研究意义2. ILM核心概念2.1 ILM的四个阶段2.1.1 Hot阶段2.1.2 Warm阶段2.1.3 Cold阶段2.1.4 Delete阶段3. ILM实战指南3.1 定义ILM策略3.1.1 创建ILM策略3.1.…...
CTO 每月烧 600 亿 token,3 个月完成百名程序员七八年写的 800 万行代码
①2026 年 5 月 9 日,昆仑万维董事长方汉的一番发言引热议,相关话题冲上热搜。方汉近日在访谈中坦承,自己每月实际消耗的 Token 高达 20 亿至 30 亿。此前他对外宣称的数字仅为 1 亿,属于刻意的低调处理。他甚至略带自嘲地表示&am…...
ARM Trace单元架构与TRCVICTLR寄存器详解
1. ARM Trace单元架构概述在嵌入式系统开发领域,调试能力往往决定了问题定位的效率和质量。ARM架构提供的Trace单元(Embedded Trace Macrocell, ETM)作为处理器指令执行流追踪的核心组件,已经成为现代SoC调试基础设施的重要组成部…...
Starknet智能体经济基础设施:构建自主安全的链上AI代理
1. 项目概述:构建自主、安全的 Starknet 智能体经济基础设施如果你正在探索如何让 AI 智能体(Agent)在区块链上真正“活”起来,而不仅仅是作为一个调用 API 的脚本,那么starknet-agentic这个项目就是你一直在找的答案。…...
Armv9架构中STINDEX_EL1与SVCR寄存器详解
1. Arm架构中的STINDEX_EL1寄存器解析在Armv9架构中,STINDEX_EL1(Saved TIndex Register for EL1)是一个关键的系统寄存器,主要用于在异常进入时保存EL1的TIndex值。这个寄存器仅在实现了FEAT_S1POE2和FEAT_AA64特性时存在&#x…...
终极指南:八大网盘直链下载助手完整使用教程,告别限速烦恼
终极指南:八大网盘直链下载助手完整使用教程,告别限速烦恼 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国…...
2026年小程序多少钱对比:精选5大权威推荐帮你选对平台
小程序开发方案的选择直接影响功能匹配度与成本效益,2026年主流服务商主要分为模板化与定制化两类路径。本文将从开发费用构成、五大平台核心方案及选择策略三方面展开分析,帮助您快速定位适合自身业务阶段与预算的选项。内容涵盖基础功能解析、价格对比…...
一天2710亿Token!“爱马仕”反超“龙虾”,AI Agent进入真实用量竞争阶段
“爱马仕”登顶全球应用调用榜5月9日,Hermes Agent(昵称:爱马仕)登顶OpenRouter全球应用调用量榜首,首次超越OpenClaw(昵称:龙虾)。据OpenRouter应用Token消耗榜最新数据,…...
训练篇第5节:NCCL(二)——深入分析Ring AllReduce算法与带宽最优性
理解Ring AllReduce,你就掌握了数据并行分布式训练的通信命脉 前言 上一节我们学习了分布式训练的三种并行策略,其中数据并行最核心的通信原语就是AllReduce。在深入篇中,我们简单介绍了NCCL和AllReduce,但那一节更侧重API使用。今天,我们将深入Ring AllReduce算法的内部…...
Java——继承实现的基本原理
继承实现的基本原理1、示例2、类加载过程3、对象创建的过程4、方法调用的过程5、变量访问的过程6、继承是把双刃剑6.1、继承破坏封装6.2、封装是如何被破坏的6.3、继承没有反映is-a关系6.4、如何应对继承的双面性1、示例 Base类: public class Base {public stati…...
3分钟解锁B站评论区智能识别:开源成分检测器让用户画像一目了然
3分钟解锁B站评论区智能识别:开源成分检测器让用户画像一目了然 【免费下载链接】bilibili-comment-checker B站评论区自动标注成分,支持动态和关注识别以及手动输入 UID 识别 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-comment-checker…...
