题解 | #数组中的逆序对#
数组中的逆序对
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
}

阿里云工作强度 727人发布