BIT-逆序数
2024-09-07 10:30:05
2019-12-17 09:42:44
问题描述:
问题求解:
逆序数问题非常经典,使用树状数组可以高效的解决这个问题。
public List<Integer> countSmaller(int[] nums) {
List<Integer> res = new ArrayList<>();
int n = nums.length;
int[] nums_copy = Arrays.copyOf(nums, n);
Map<Integer, Integer> map = new HashMap<>();
Arrays.sort(nums_copy);
int rank = 0;
for (int i = 0; i < n; i++) {
if (i == 0 || nums_copy[i] != nums_copy[i - 1]) {
map.put(nums_copy[i], ++rank);
}
}
int[] bit = new int[map.size() + 1];
for (int i = n - 1; i >= 0; i--) {
update(bit, map.get(nums[i]));
res.add(query(bit, map.get(nums[i]) - 1));
}
Collections.reverse(res);
return res;
} private void update(int[] bit, int idx) {
for (int i = idx; i < bit.length; i += i & -i) {
bit[i] += 1;
}
} private int query(int[] bit, int idx) {
int res = 0;
for (int i = idx; i > 0; i -= i & -i) {
res += bit[i];
}
return res;
}
最新文章
- [django]Django的css、image和js静态文件生产环境配置
- 用Python实现一个爬取XX大学电费通知的小脚本
- vpython初探
- 【转】数据预处理之独热编码(One-Hot Encoding)
- 实验一《开发环境的熟悉》&;实验二《固件设计》
- JavaScript案例五:下拉列表左右选择
- MySQL教程:数据库具体操作
- Android 自定义控件 EditText输入框两边加减按钮Button
- 整型(int)转时间格式字符串及页面long型转时间格式字符串
- Python Challenge 过关心得(0)
- 轻松学会多线程(四)——synchronized同步keyword知多少
- 一旦ORA-28000: the account is locked用户锁定故障排除
- (转)关于docker的15个小tip
- python3+django2 开发易语言网络验证(下)
- 【Python】2.x与3​​.x版本的选用&;版本间的区别
- Google&#39;s Machine Learning Crash Course #04# First Steps with TensorFlow
- linux下对数据库操作
- cmder的使用和编码问题解决
- 【基于初学者的SSH】struts2 环境配置
- vue react angular对比
热门文章
- Leetcode 981. Time Based Key-Value Store(二分查找)
- 微软发布Microsoft Concept Graph和Microsoft Concept Tagging模型
- numpy.random模块用法总结
- USB小白学习之路(4)HID键盘程序
- 编写一个可复用的SpringBoot应用运维脚本
- Implementing 5G NR Features in FPGA
- [面试专题]前端需要知道的web安全知识
- 【渗透】node.js经典问题
- Java基础--面向对象(上)
- PC端如何下载B站里面的视频?