栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

牛客网:数组中的逆序对

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

牛客网:数组中的逆序对

这里和之前的leetcode上面的逆序对不一样的点在于,这里要取膜。

具体思路可以看

剑指offer51:数组中的逆序对_lsgoose的博客-CSDN博客

不过这里有一个很奇怪的点在于取模:

代码如下:

class Solution {
    private:
    const int kmod=1000000007;
public:
    int InversePairs(vector data) {
        vector tmp(data.size());
        return mergeSort(data, tmp, 0, data.size()-1);
    }
    int mergeSort(vector&nums,vector&tmp,int l,int r){
        if(l>=r) return 0;
        int mid=l+((r-l)>>1);
        int num=mergeSort(nums, tmp, l, mid) + mergeSort(nums, tmp, mid+1, r);
        int left=l, right=mid+1, pos=l;
        while(left<=mid && right<=r){
            if(nums[left]<=nums[right]){
                tmp[pos]=nums[left++];
            }else{
                num+=mid-left+1;
                num%=kmod;
                tmp[pos]=nums[right++];
            }
            ++pos;
        }
        while(left<=mid){
            tmp[pos++]=nums[left++];
        }
        while(right<=r){
            tmp[pos++]=nums[right++];
        }
        copy(tmp.begin()+l, tmp.begin()+r+1, nums.begin()+l);
        return num;
    }
};

这里的num先相加再取模和先去摸再相加结果不一样。

为什么呢,因为先取模再相加会溢出哒

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/933451.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号