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

豆包 315.计算右侧小于当前元素的个数 public List<Integer> countSmaller(int[] nums)

我直接给你能直接提交 LeetCode 的 Java 题解,这是 315. Count of Smaller Numbers After Self 最优解法:归并排序 + 索引数组,时间复杂度 O(n log n)。

完整代码

java

import java.util.*;

class Solution {
private int[] index; // 记录原始下标
private int[] temp; // 归并临时数组
private int[] res; // 答案

public List<Integer> countSmaller(int[] nums) { int n = nums.length; index = new int[n]; temp = new int[n]; res = new int[n]; for (int i = 0; i < n; i++) { index[i] = i; } mergeSort(nums, 0, n - 1); List<Integer> ans = new ArrayList<>(); for (int num : res) { ans.add(num); } return ans; } // 归并排序 private void mergeSort(int[] nums, int l, int r) { if (l >= r) return; int mid = (l + r) >>> 1; mergeSort(nums, l, mid); mergeSort(nums, mid + 1, r); merge(nums, l, mid, r); } // 合并并统计右侧比它小的数 private void merge(int[] nums, int l, int mid, int r) { int i = l, j = mid + 1; int pos = l; while (i <= mid && j <= r) { if (nums[index[i]] <= nums[index[j]]) { temp[pos++] = index[i]; res[index[i]] += j - (mid + 1); i++; } else { temp[pos++] = index[j++]; } } // 处理左边剩余 while (i <= mid) { temp[pos++] = index[i]; res[index[i]] += j - (mid + 1); i++; } // 处理右边剩余 while (j <= r) { temp[pos++] = index[j++]; } // 复制回去 System.arraycopy(temp, l, index, l, r - l + 1); }

}

思路一句话

  • 用归并排序对数组从右往左合并
  • 合并时,右边已经有序,可以直接算出有多少个数比当前数小
  • 用 index[] 保存原始下标,保证答案能对应回原位置

如果你愿意,我可以再给你:

  • 树状数组(Fenwick Tree)版本
  • 线段树版本
  • 逐行注释极简版

你想要哪个?

http://www.jsqmd.com/news/467624/

相关文章:

  • 【ESP32 IDF】ADF linux环境搭建
  • 频域的概念以及作用
  • 虚拟偶像诱导测试中的高危漏洞与防御体系构建
  • GRBL 1.1驱动4-6轴运动控制系统全套资料,涵盖源码、原理图与PCB图,可支持CNC加工...
  • Linux学习笔记(十六)--进程信号
  • 《多业务隔离的高性能队列分发架构:基于ConcurrentLinkedQueue的独立队列设计与实践》
  • 数字重生诉讼案中的测试启示:当情感算法遭遇伦理边界
  • 【Video Agent】(CVPR 2025)VIDEOTREE: Adaptive Tree-based Video Representation for LLM Reasoning ...
  • 群晖通过acme.sh自动化部署Let’s Encrypt证书的实践指南
  • 5G前传接口实战:O-RAN中M/C/U/S平面协议栈配置避坑指南
  • 第一篇:开篇总论——AI主导的“算法战争”:美以伊战改写现代战争规则
  • 使用acme.sh实现SSL证书自动化管理:从申请到续期全攻略
  • rocketmq5--必要知识点
  • 方法回顾--空间转录组多模态交叉分析(MIA)
  • Nuclei实战:5分钟搞定企业级漏洞扫描(附最新模板下载指南)
  • allure测试报告——项目
  • 2026过氧化氢厂推荐:工业/食品/电子级合规过氧化氢厂家最新权威排行榜 - 深度智识库
  • 深度学习赋能双色球预测:特征工程与模型融合实战解析
  • Linux alternatives / update-alternatives 使用教程
  • 物美卡回收最新操作攻略 - 猎卡回收公众号
  • 2026年四川电缆与变压器回收服务商深度测评:谁才是工业产废企业的“专业护航者”? - 深度智识库
  • 避坑指南:特征转换中SVD/LSA的5个常见误区与优化方案
  • 不仅能听还能懂:网易有道发布首个同传Agent,重塑高频信息处理场景
  • 从电话通信到数字音频:PCM编码中的μ律15折线为何在北美更流行?
  • Qt5.15.2下QML地图插件源码修改实战:解决OSM在线地图加载失败问题
  • DNANet实战解析:如何用密集嵌套注意力网络提升红外小目标检测精度
  • 泛微E9移动端集成实战:如何为不同业务配置多个Emobile7工作台(附代码修改步骤)
  • 性能测试基础概念
  • 2026陕西仿古铝瓦厂家排名|源头好厂口碑推荐,选型不踩坑 - 朴素的承诺
  • 用Colab免费GPU训练专属SDXL模型:手把手教你跑通BLIP标注+Waifu Diffusion打标