当前位置:   article > 正文

计算右侧小于当前元素的个数(归并排序)_用r语言计算右侧小于当前元素的个数

用r语言计算右侧小于当前元素的个数

### 解题思路

归并排序

### 代码

  1. class Solution {
  2. public:
  3. vector<int> res;
  4. vector<pair<int,int>> temp;
  5. vector<pair<int,int>> pairIdx;
  6. void mergeSort (vector<pair<int,int>>& nums,int l,int r){
  7. if(l >= r) return;
  8. int mid = (l + r) >> 1;
  9. mergeSort(nums,l,mid);
  10. mergeSort(nums,mid+1,r);
  11. int p1=l,p2=mid+1,k=0;
  12. while(p1 <= mid && p2 <= r){
  13. if(nums[p1].first <= nums[p2].first){
  14. res[nums[p1].second] += p2-mid-1;
  15. temp[k++] = nums[p1++];
  16. }
  17. else temp[k++] = nums[p2++];
  18. }
  19. while(p1 <= mid){
  20. res[nums[p1].second] += p2-mid-1;
  21. temp[k++] = nums[p1++];
  22. }
  23. while(p2 <= r) temp[k++] = nums[p2++];
  24. for(int i = l,j=0;i <= r;i++,j++) nums[i] = temp[j];
  25. }
  26. vector<int> countSmaller(vector<int>& nums) {
  27. res = vector<int>(nums.size(),0);
  28. temp = vector<pair<int,int>>(nums.size());
  29. for(int i = 0; i < nums.size(); ++i) pairIdx.push_back({nums[i],i});
  30. mergeSort(pairIdx,0,nums.size()-1);
  31. return res;
  32. }
  33. };

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/227576
推荐阅读
相关标签
  

闽ICP备14008679号