Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Sword To Offer 035 - 数组中的逆序对

Sword To Offer 035 - 数组中的逆序对

作者头像
Reck Zhang
发布于 2021-08-11 03:40:42
发布于 2021-08-11 03:40:42
34100
代码可运行
举报
文章被收录于专栏:Reck ZhangReck Zhang
运行总次数:0
代码可运行

数组中的逆序对

Desicription

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007

Solution

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
private:
    int count = 0;
    void Merge(vector<int>& data, int left, int right) {
        int mid = (left + right) >> 1;
        int i = left;
        int j = mid + 1;
        int k = right;
        vector<int> tmp;
        while(i <= mid && j <= right) {
            if(data[i] <= data[j]) {
                tmp.emplace_back(data[i++]);
            } else {
                count += mid - i + 1;
                count %= 1000000007;
                tmp.emplace_back(data[j++]);
            }
        }
        while(i <= mid) {
            tmp.emplace_back(data[i++]);
        }
        while(j <= right) {
            tmp.emplace_back(data[j++]);
        }
        int index = 0;
        for(int a = left; a <= right; a++) {
            data[a] = tmp[index++];
        }

    }
    void MergeSort(vector<int>& data, int left, int right) {
        if(left < right) {
            int mid = (left + right) >> 1;
            MergeSort(data, left, mid);
            MergeSort(data, mid + 1, right);
            Merge(data, left, right);
        }
    }
public:
    int InversePairs(vector<int> data) {
        MergeSort(data, 0, data.size() - 1);
        return count;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【剑指Offer】51. 数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
瑞新
2020/12/07
2160
C++版 - 剑指Offer 面试题36:数组中的逆序对及其变形(Leetcode 315. Count of Smaller Numbers After Self)题解
题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
Enjoy233
2019/03/05
1.4K0
C++版 - 剑指Offer 面试题36:数组中的逆序对及其变形(Leetcode 315. Count of Smaller Numbers After Self)题解
每日一题《剑指offer》数组篇之数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P mod 1000000007
终有救赎
2023/10/16
1910
每日一题《剑指offer》数组篇之数组中的逆序对
剑指offer | 面试题38:数组中的逆序对
「归并排序」与「逆序对」是息息相关的。归并排序体现了 “分而治之” 的算法思想,具体为:
千羽
2022/02/23
1K0
剑指offer | 面试题38:数组中的逆序对
[PHP] 算法-数组归并排序并计算逆序对的个数的PHP实现
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 1.数组归并排序 2.归并排序比较左右两个堆数组中的元素大小时,进行计数,倒着比较,因为左堆倒第一如果比右堆倒第一大,那么就比右堆的所有都大 mergeSort if left<right mid=[(p+r)/2] mergeSort(arr,left,mid,
唯一Chat
2019/09/10
7250
每天一道剑指offer-数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
乔戈里
2019/03/06
4480
每天一道剑指offer-数组中的逆序对
剑指35-数组中的逆序对
根据归并排序的特点,每次对比两个有序数组,符合条件的逆序对数+1,整体的算法其实就是一个归并排序,这里我把划分和归并合并成了一个方法,难点或者说巧妙的点在于res+=middle-l+1,因为序列有序,所以当遇到data[l]>=data[r]的时候,所以l右边的数都符合条件
opencode
2022/12/26
2960
剑指35-数组中的逆序对
牛客网 数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
2018/09/04
1.4K0
逆序对-----归并排序
本周遇到了一道蛮有意思的题目,分享给大家欣赏一下!这道题使用归并排序。原来在力扣上刷题时,也遇到过一次归并的思路,不过当时一知半解,就跳过去了,心想着以后遇到了再深究一下,结果很快就遇到了----天注定啊!那我们这次一起来看看这个排序思想吧!
鹏-程-万-里
2020/04/16
4090
逆序对-----归并排序
腾讯课堂 IMWeb 七天前端求职提升营 Day 6
本次的系列博文主要是针对 腾讯课堂七天前端求职提升营 课程中,所推送的面试题目及编程练习的一次汇总,期间还包括三次直播课的分享,均由腾讯导师给大家讲解,该系列博文的发布已得到 IMWeb 前端学院助教的许可
Nian糕
2018/08/21
4860
腾讯课堂 IMWeb 七天前端求职提升营 Day 6
<>并归排序&&小和问题&&逆序对问题
master公式(也称主方法)是用来利用分治策略来解决问题经常使用的时间复杂度的分析方法,(补充:分治策略的递归解法还有两个常用的方法叫做代入法和递归树法,以后有机会和亲们再唠),众所周知,分治策略中使用递归来求解问题分为三步走,分别为分解、解决和合并。
大学里的混子
2019/01/24
8310
golang刷leetcode 技巧(37)数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
golangLeetcode
2022/08/02
2650
初识算法 · 分治(3)
​本文的主题是分治,通过两道题目讲解,一道是归并排序,一道是求逆序对。 链接分别为:
_lazy
2024/11/26
830
初识算法 · 分治(3)
【剑指offer】35.数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
AI那点小事
2020/07/21
6450
[剑指offer][Java]数组中的逆序对
链接:https://www.nowcoder.com/questionTerminal/96bd6684e04a44eb80e6a68efc0ec6c5 来源:牛客网
蛮三刀酱
2019/03/26
1K0
剑指Offer(三十五)-- 数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
秦怀杂货店
2022/02/15
4320
剑指Offer(三十五)-- 数组中的逆序对
【剑指offer】排序篇-含题目代码思路解析
【剑指offer】排序篇-含题目代码思路解析 1.JZ3 数组中重复的数字 C++ 注意 2.JZ51 数组中的逆序对 1.JZ3 数组中重复的数字 C++ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param numbers int整型vector * @return int整型 */ int duplicate(v
司六米希
2022/11/15
2190
【剑指offer】排序篇-含题目代码思路解析
剑指offer 数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
week
2018/12/24
4520
LeetCode-面试题51-数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
benym
2022/07/14
2400
统计序列中的逆序对
因为好像做过这个题目,所以稍微提一下。最简单的方式就是归并排序 题解 方法分别是归并排序和树状数组。
千灵域
2022/06/17
3400
推荐阅读
相关推荐
【剑指Offer】51. 数组中的逆序对
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验