![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树状数组
文章平均质量分 77
yuzhang_zy
现在的我不是最好的我,未来的我才是最好的我,每一篇博客都记录着我的成长
展开
-
剑指 Offer 51 数组中的逆序对(树状数组、归并排序思想)
1. 问题描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 1:输入: [7,5,6,4]输出: 5限制:0 <= 数组长度 <= 50000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof2. 思路分析:① 这道题目类似于力扣的693题,两道题目都属于逆序对的相关原创 2021-09-07 17:03:54 · 118 阅读 · 0 评论 -
493 翻转对(树状数组、归并排序)
1. 问题描述:给定一个数组nums,如果i < j且nums[i] > 2 * nums[j]我们就将(i, j)称作一个重要翻转对。你需要返回给定数组中的重要翻转对的数量。示例 1:输入: [1,3,2,3,1]输出: 2示例 2:输入: [2,4,3,5,1]输出: 3注意:给定数组的长度不会超过50000。输入数组中的所有数字都在32位整数的表示范围内。来源:力扣(LeetCode)链接:https://leetcode-cn.com/prob...原创 2021-07-13 21:20:39 · 451 阅读 · 0 评论 -
406 根据身高重建队列 (贪心,二分 + 树状数组优化)
1. 问题描述:假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面正好有ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。示例 1:输入:people = [[7,0].原创 2021-06-24 12:16:51 · 153 阅读 · 1 评论 -
315 计算右侧小于当前元素的个数(树状数组)
1. 问题描述:给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。示例:输入:nums = [5,2,6,1]输出:[2,1,1,0]解释:5 的右侧有 2 个更小的元素 (2 和 1)2 的右侧仅有 1 个更小的元素 (1)6 的右侧有 1 个更小的元素 (1)1 的右侧有 0 个更小的元素提示:0 <= nums.length <= ..原创 2021-06-04 09:26:14 · 176 阅读 · 0 评论 -
307 区域和检索 - 数组可修改(树状数组)
1. 问题描述:给你一个数组 nums ,请你完成两类查询,其中一类查询要求更新数组下标对应的值,另一类查询要求返回数组中某个范围内元素的总和。实现 NumArray 类:NumArray(int[] nums) 用整数数组 nums 初始化对象void update(int index, int val) 将 nums[index] 的值更新为 valint sumRange(int left, int right) 返回子数组 nums[left, right] 的总和(即,nums[lef原创 2021-06-01 11:40:54 · 208 阅读 · 0 评论 -
树状数组理解
1. 在领扣的题目中接触到了树状数组,感觉这个树状数组一开始的时候理解难度还是有点大,但是后面看完相关的例子与资料之后感觉还是可以理解的,树状数组主要是用于某个位置开始的联动修改(因为要结合lowbit函数)与统计某个区间的总和,效率非常高2.我感觉比较好理解树状数组的的博客:(1)https://blog.csdn.net/bestsort/article/details/80796...原创 2020-04-25 16:32:04 · 143 阅读 · 0 评论 -
1409 查询带键的排列(树状数组)
1. 问题描述:给你一个待查数组 queries ,数组中的元素为 1 到 m 之间的正整数。 请你根据以下规则处理所有待查项 queries[i](从 i=0 到 i=queries.length-1):一开始,排列 P=[1,2,3,...,m]。对于当前的 i ,请你找出待查项 queries[i] 在排列 P 中的位置(下标从 0 开始),然后将其从原位置移动到排列 P 的起始位...原创 2020-04-25 16:17:07 · 254 阅读 · 1 评论