当前位置: 首页 > news >正文

分治-归并系列一>数组中的逆序对

目录

  • 题目:
  • 解析:
  • 代码:

题目:

链接: link这里是引用

解析:

这里是引用

代码:

class Solution {
    int[] tmp;
    public int reversePairs(int[] record) {
        tmp = new int[record.length];
        return mergeSort(record,0,record.length-1);
    }

    private int mergeSort(int[] record, int left, int right){
        if(left >= right) return 0;

        int ret = 0;
        int mid = (right + left) / 2;
        int cur1 = left, cur2 = mid+1, i = 0;

        //左半部分的个数 + 排序,右半部分的个数 + 排序
        ret += mergeSort(record,left, mid);
        ret += mergeSort(record, mid+1, right);

        //一左一右的个位数 + 排序
        while(cur1 <= mid && cur2 <= right){

            if(record[cur1] <= record[cur2]){
                tmp[i++] = record[cur1++];//排序
            } else {
                ret += mid - cur1 + 1;
                tmp[i++] = record[cur2++];//排序
            }
        } 

        while(cur1 <= mid) tmp[i++] = record[cur1++];
        while(cur2 <= right) tmp[i++] = record[cur2++];
        for(int j = left; j <= right; j++){
            record[j] = tmp[j-left];
        }

        return ret;
    }
}

相关文章:

  • Linux的异常修复机制__ex_table主要作用
  • 全球地理数据库 GeoNames
  • Android Framework 层 Hook 技术详解
  • 内网渗透(DMZ--->DC)
  • 监控易一体化运维:资产管理,企业资产的智能管家
  • 项目日志是否应该启用文件压缩?
  • Keil调试(RTT Debug 断点)
  • 查看iphone手机的使用记录-克魔实战
  • OpenCv(二)——边界填充、阈值处理
  • AspNetCore路由:网络请求的交通指挥官
  • java笔记02
  • 微服务架构中的精妙设计:环境和工程搭建
  • 使用G-suite Workspace教育订阅快速搭建企业邮局及免费申请其他服务
  • 制作cass高程点块定义——cad c#二次开发——待调试
  • 鸿蒙学习手册(HarmonyOSNext_API16)_数据持久化③:关系型数据库
  • 【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的消息队列:使用 RabbitMQ 实现异步处
  • C++ STL常用算法之常用算术生成算法
  • 【区块链安全 | 第十四篇】类型之值类型(一)
  • ShuffleNet、MobileNet 和 EfficientNet的区别
  • 探索OCR的第二个方案:EasyOCR