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

数组中的逆序对

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

#include <algorithm>
#include <type_traits>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int InversePairs(vector<int>& nums) {
        size_t cnt = 0;
        auto merge = [&nums, &cnt](auto&& merge_, int l, int r) -> void {
            if(l + 1 == r or l == r) return;

            int len = r - l;
            int mid = (l + r) / 2;

            merge_(merge_, l, mid);
            merge_(merge_, mid, r);

            std::remove_reference_t<decltype(nums)> tmp;
            tmp.reserve(len);

            int pa = l, pb = mid;
            while(pa < mid and pb < r) {
                auto a = nums[pa];
                auto b = nums[pb];
                if (a <= b){
                    tmp.push_back(a);
                    ++ pa;
                } else {
                    tmp.push_back(b);
                    cnt += mid - pa;
                    ++ pb;
                }
            }
            
            for(; pa < mid; ++ pa) tmp.push_back(nums[pa]);
            for(; pb < r; ++ pb) tmp.push_back(nums[pb]);

            move(tmp.begin(), tmp.end(), nums.begin() + l);
        };

        merge(merge, 0, nums.size());
        return cnt % 1000000007;
    }
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 11:21
被夸真的超级开心,好可爱的姐姐
码农索隆:老色批们不用脑补了,我把金智妮的图找来了查看图片
点赞 评论 收藏
分享
程序员小白条:这比例牛逼,750:1
点赞 评论 收藏
分享
06-12 16:23
已编辑
小米_软件开发(准入职员工)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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