题解 | 数组中的逆序对

数组中的逆序对

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

package main

func InversePairs(nums []int) int {
    tmp := make([]int, len(nums))
    var left, right int
    right = len(nums) - 1

    res := mergeSort(nums, tmp, left, right)

    return res % 1000000007
}

func mergeSort(nums, tmp []int, left, right int) int{
    count := 0
    if left >= right{
        return count
    }

    mid := (left+right) / 2

    // 递归调用 分
    count_left := mergeSort(nums, tmp ,left, mid)
    count_right := mergeSort(nums, tmp , mid+1, right)
    // 合并递归 治
    count_now := merge(nums, tmp ,left, mid, right) 

    return (count_left + count_right + count_now)
}

func merge(nums, tmp []int, left, mid, right int) int{
    count := 0
    var i, j, t int
    t = left
    i = left
    j = mid + 1

    for i <= mid && j <= right{
        if nums[i] > nums[j]{
            tmp[t] = nums[j]
            j++
            count += mid - i + 1
        } else{
            tmp[t] = nums[i]
            i++
        }
        t++
    }

    for i <= mid{
        tmp[t] = nums[i]
        i++
        t++
    }

    for j <= right{
        tmp[t] = nums[j]
        j++
        t++
    }

    for p:=left; p<=right; p++{
        nums[p] = tmp[p]
    }

    return count
}

tmp 负责收集 下标 left 到 right 的原始

注意 i j t 的初始值

return res % 1000000007

全部评论
点赞 回复 分享
发布于 02-21 16:04 陕西

相关推荐

头像
04-17 09:29
已编辑
湖南农业大学 后端
睡姿决定发型丫:本硕末9也是0offer,简历挂了挺多,只有淘天 美团 中兴给了面试机会,淘天二面挂,美团一面kpi面,中兴一面感觉也大概率kpi(虽然国企,但一面0技术纯聊天有点离谱吧)
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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