题解 | #数组中的逆序对#
数组中的逆序对
https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5
归并方法:
package main
func InversePairs(nums []int) int {
len := len(nums)
if len < 2 {
return 0
}
temp := make([]int, len)
copy := nums
return reversePairs(copy, 0, len-1, temp) % 1000000007
}
func reversePairs(nums []int, left, right int, temp []int) int {
if left == right {
return 0
}
mid := left + (right-left)>>1
leftPairs := reversePairs(nums, left, mid, temp)
rightPairs := reversePairs(nums, mid+1, right, temp)
crossPairs := mergeAndCount(nums, left, mid, right, temp)
return leftPairs + rightPairs + crossPairs
}
func mergeAndCount(nums []int, left, mid, right int, temp []int) int {
for i := left; i <= right; i++ {
temp[i] = nums[i]
}
i, j, count := left, mid+1, 0
for k := left; k <= right; k++ {
if i == mid+1 {
nums[k] = temp[j]
j++
} else if j == right+1 {
nums[k] = temp[i]
i++
} else if temp[i] <= temp[j] {
nums[k] = temp[i]
i++
} else {
nums[k] = temp[j]
count += (mid + 1 - i)
j++
}
}
return count
}
#我想梦到的事##Offer求比较#
