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

数组中的逆序对

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;
    }
};

全部评论

相关推荐

菜菜咪:1. 可以使用简历网站的模版,美观度会更好一点 2. 邮箱可以重新申请一个,或者用qq邮箱的别名,部分hr可能会不喜欢数字邮箱 3. 项目经历最好分点描述,类似的项目很多,可以参考一下别人怎么写的 4. 自我评价可加可不加,技术岗更看重技术。最后,加油,优秀士兵
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务