逆序对问题

简介: 逆序对问题

Reverse pair

问题

一个数组,其中一个数的左边有数大于其本身,则称它们形成逆序对,求逆序对的数量

思路

利用归并排序,综合小和问题解决

实现

int ReversePair(int arr[],int lenth)
{
   if(lenth < 2) return 0;
    return process(arr,0,lenth - 1);
}
int process(int arr[],int L,int R)
{
    if(L >= R) return 0;
    int mid = (L + ((R - L) >> 1));
    return process(arr,L,mid) + process(arr,mid + 1,R) + merge(arr,L,mid,R);
}
int merge(int arr[],int L,int mid,int R)
{
    int help[R - L + 1];
    int p1 = L;
    int p2 = mid + 1;
    int i = 0;
    int res = 0;
    while(p1 <= mid && p2 <= R)
    {
        res += arr[p1] > arr[p2] ? (mid - p1 + 1) : 0;
        help[i++] = arr[p1] > arr[p2] ? arr[p2++] : arr[p1++];
    }
    while(p1 <= mid)
    {
        help[i++] = arr[p1++];
    }
    while(p2 <= R)
    {
        help[i++] = arr[p2++];
    }
    for(i = 0;i < R - L + 1;i++)
    {
        arr[L + i] = help[i];
    }
    return res;
}

总结

归并排序,划分两个区域,根据左区域下标算出,左边有多少数大于右边。

目录
相关文章
|
SQL 数据库
SQL 中的 MIN 和 MAX 以及常见函数详解及示例演示
SQL中的MIN()函数和MAX()函数用于查找所选列的最小值和最大值,分别。以下是它们的用法和示例:
848 0
|
SQL Oracle 关系型数据库
sqoop的导入导出以及where条件过滤数据导出
sqoop的导入导出以及where条件过滤数据导出
|
存储 移动开发 程序员
alist对接钉钉sso登录
本文介绍了如何将Alist与钉钉SSO登录对接。Alist是一个基于Go语言开发的文件管理程序,支持多平台和多种存储方式。通过设置自定义头部、配置钉钉开放平台应用及回调参数,并获取Client ID和Client Secret,可实现钉钉SSO登录功能。最后根据需求配置用户权限,默认权限值可通过相加不同权限数字获得。成品展示了一个美观且实用的文件管理系统。
alist对接钉钉sso登录
|
10月前
|
NoSQL Java API
在Java环境下如何进行Redis数据库的操作
总的来说,使用Jedis在Java环境下进行Redis数据库的操作,是一种简单而高效的方法。只需要几行代码,就可以实现复杂的数据操作。同时,Jedis的API设计得非常直观,即使是初学者,也可以快速上手。
405 94
|
传感器 监控 安全
|
机器学习/深度学习 API 开发工具
|
SQL Oracle 关系型数据库
OceanBase数据库
OceanBase数据库
1009 1
|
安全 搜索推荐 Linux
Linux C++ 环境下数据高效备份策略:全面指南与最佳实践
Linux C++ 环境下数据高效备份策略:全面指南与最佳实践
305 1
|
存储 数据库 图形学
CorelDRAW2023版软件汉化补丁包下载CDR23专业矢量软件
CorelDRAW2023中文版是专业矢量软件中的最老牌大哥,功能强大没说的,此外它还集成了Corel PHOTO-PAINT、Corel Font Manager等在内的7个软件包。而且对比于illustrator和freehand,CorelDRAW更为简单易上手设计工具,具有行业标准文件兼容性,支持.DWG、.STL、.PDF和.CDR,具有省时协作和项目共享、自动化和自定义选项等优势,你可以自由的进行绘图环境的设置,可以应用单位、图形边界、网格和捕捉设置,并将这些设置存储在样板图形中。cdr2023下载:http://t.csdn.cn/t8wDL
1715 18
|
存储 编解码 算法
09 OpenCV图形检测
cv2.findContours() 函数是OpenCV中用于寻找轮廓的函数之一。它可以用于在二值图像中查找并检测出所有的物体轮廓,以及计算出这些轮廓的各种属性,例如面积、周长、质心等。