题解 | #数组中的逆序对#

数组中的逆序对

https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5

#include <algorithm>
#include <cstdint>
#include <random>
#include <vector>
class Solution {
private:
    const int modval = 1000000007;
public:
    void mergeArr(vector<int>& inArr, vector<int>& outArr, int start, int mid, int end, uint64_t* invNumCount)
    {
        int i = start;
        int j = mid+1;
        int k = start;
        // int invNumCount = 0;
        while (i <= mid || j <= end) {
            if (i > mid) {
                outArr[k++] = inArr[j++];
            }
            else if (j > end) {
                outArr[k++] = inArr[i++];
                // invNumCount++;
            }
            else if (inArr[i] <= inArr[j]) {
                outArr[k++] = inArr[i++];
            }
            else {
                *invNumCount += (mid-i+1);
                *invNumCount = (*invNumCount) % modval;
                outArr[k++] = inArr[j++];
            }
        }
        for (int s = start; s <= end; s++) {
            inArr[s] = outArr[s];
        }
        std::cout << "inverse number: " << *invNumCount << endl;
        return;
    }
    void mergeSort(vector<int>& inArr, vector<int>& outArr, int start, int end, uint64_t* invNumCount)
    {
        if (start < end) {
            int mid = (start + end)/2;
            mergeSort(inArr, outArr, start, mid, invNumCount);
            mergeSort(inArr, outArr, mid+1, end, invNumCount);
            mergeArr(inArr, outArr, start, mid, end, invNumCount);
        }
        return;
    }
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int InversePairs(vector<int>& nums) {
        // write code here
        vector<int> inArr = nums;
        vector<int> outArr(nums.size());
        uint64_t invNumCount = 0;
        mergeSort(inArr, outArr, 0, nums.size()-1, &invNumCount);
        return invNumCount;
    }
};

在线编程练习 文章被收录于专栏

C++在线编程练习题解

全部评论

相关推荐

程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
狸猫换offer:埋点都出来了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务