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

数组中的逆序对

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

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param nums int整型一维数组
 * @return int整型
 */
func InversePairs(nums []int) int {
	var mergeSort func (nums []int) int
	mergeSort = func(nums []int) int {
		if len(nums) < 2 {
			return 0
		}
		mid := len(nums)/2
		leftNums := make([]int,mid)
		rightNums := make([]int,len(nums)-mid)
		copy(leftNums, nums[:mid])
		copy(rightNums, nums[mid:])

		leftCount := mergeSort(leftNums)
		rightCount := mergeSort(rightNums)
		i, j := 0, 0
		mergeCount := 0
		for k := 0;k < len(nums); k++ {
			if i < len(leftNums) && (j >= len(rightNums) || leftNums[i] <= rightNums[j]){
				// 直接使用nums记录省去拷贝的时间
				nums[k] = leftNums[i]
				i++
			}else{
				nums[k] = rightNums[j]
				j++
				mergeCount += len(leftNums) - i
			}
		}		
		return leftCount + rightCount + mergeCount
	}
	return mergeSort(nums) % 1000000007
}

全部评论

相关推荐

07-17 11:50
门头沟学院 Java
投递腾讯等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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