首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >分治-归并系列一>计算右侧小于当前元素的个数

分治-归并系列一>计算右侧小于当前元素的个数

作者头像
用户11305962
发布2025-04-07 08:13:47
发布2025-04-07 08:13:47
12900
代码可运行
举报
文章被收录于专栏:学习学习
运行总次数:0
代码可运行

题目:

解析:

代码呈现:

代码语言:javascript
代码运行次数:0
运行
复制
class Solution {
    int[] index;//标记nums数组中的原始下标
    int[] tmpIndex;
    int[] tmpNums;
    int[] ret;

    public List<Integer> countSmaller(int[] nums) {
        int n = nums.length;
        index = new int[n];
        tmpIndex = new int[n];
        tmpNums = new int[n];
        ret = new int[n];

        for(int i = 0; i < n; i++)
            index[i] = i;

        mergeSort(nums,0,n-1);
        List<Integer> s = new ArrayList<>();
        for(int x : ret)
            s.add(x);
            
        return s;
    }

    private void mergeSort(int[] nums, int left, int right){
        if(left >= right) return;
        int mid = (right + left) / 2;

        int cur1 = left, cur2 = mid + 1, i = 0;

        //左半部分的个数 + 排序,右半部分的个数 + 排序
        //[left,mid][mid+1,right]
        mergeSort(nums,left,mid);
        mergeSort(nums,mid+1,right);

        //一左一右的个位数 + 排序
        while(cur1 <= mid && cur2 <= right){ 
            //降序,谁大移动谁
            if(nums[cur1] <= nums[cur2]){
                tmpNums[i] = nums[cur2];
                tmpIndex[i++] = index[cur2++];
            }else {
                ret[index[cur1]] +=  right-cur2 + 1;
                tmpNums[i] = nums[cur1];
                tmpIndex[i++] = index[cur1++];
            }
            
        }

        //处理剩余的排序⼯作
        while(cur1 <= mid){
            tmpNums[i] = nums[cur1];
            tmpIndex[i++] = index[cur1++];
        }

        while(cur2 <= right){
            tmpNums[i] = nums[cur2];
            tmpIndex[i++] = index[cur2++];
        }

        //放到原数组中
        for(int j = left; j <= right; j++){
            nums[j] = tmpNums[j-left];
            index[j] = tmpIndex[j-left];
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-04-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目:
  • 解析:
  • 代码呈现:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档