leetcode315】的更多相关文章

这是我在研究leetcode的solution第一个解决算法时,自己做出的理解,并且为了大家能看懂,做出了详细的注释. 此算法算是剑指Offer36的升级版,都使用的归并算法,但是此处的算法,难度更高,理解起来更加费劲. /* * @Param res 保存逆变对数 * @Param index 保存数组下标索引值,排序数组下标值. * 此算法使用归并算法,最大差异就在于merge()方法的转变 * * */ public List<Integer> countSmaller(int[] nu…
You are given an integer array nums and you have to return a new countsarray. The counts array has the property where counts[i] is the number of smaller elements to the right of nums[i]. Example: Input: [5,2,6,1] Output: [2,1,1,0] Explanation: To the…
public class Solution { public List<Integer> countSmaller(int[] nums) { List<Integer> res = new ArrayList<>(); if(nums == null || nums.length == 0) return res; TreeNode root = new TreeNode(nums[nums.length - 1]); res.add(0); for(int i =…
思路: bit + 离散化. 实现: #include <bits/stdc++.h> using namespace std; class Solution { public: int sum(vector<int> & bit, int i) { ; while (i) { ans += bit[i]; i -= i & -i; } return ans; } void add(vector<int> & bit, int i, int x)…
1. 采用归并排序计算逆序数组对的方法来计算右侧更小的元素 time O(nlogn): 计算逆序对可以采用两种思路: a. 在左有序数组元素出列时计算右侧比该元素小的数字的数目为 cnt=r-mid-1; 右有序数组出列完成后cnt=end-mid; b. 在右有序数组元素出列时计算左侧比该元素大的数字的数目为 cnt=mid-l+1; 左有序数组出列完成后cnt=0; 思路参考from https://leetcode-cn.com/problems/count-of-smaller-num…
Leetcode315 题意很简单,给定一个序列,求每一个数的右边有多少小于它的数. O(n^2)的算法是显而易见的. 用普通的线段树可以优化到O(nlogn) 我们可以直接套用主席树的模板. 主席树的功能是什么呢? 其实就是一句话. 原序列a的子序列a[l,r]在a排序后的序列b的子序列[L,R]中的个数. 显然本题只用到了主席树的一小部分功能. const int N = 100000 + 5; int a[N], b[N], rt[N * 20], ls[N * 20], rs[N * 2…