题解 | #数组中的逆序对#
数组中的逆序对
https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5
利用归并过程中“合”的局部有序性来统计逆序对
func InversePairs( data []int ) int { // write code here _ = mergeSort(data) return count % 1000000007 } var count int func mergeSort(data []int) []int { // 归并排序 if len(data) < 2 { return data } mid := len(data) / 2 l := mergeSort(data[:mid]) r := mergeSort(data[mid:]) return mergeCount(l, r) } func mergeCount(l, r []int) (tmp []int) { var ( i, j = 0, 0 l1, l2 = len(l), len(r) ) for i < l1 && j < l2 { if l[i] <= r[j] { tmp = append(tmp, l[i]) i++ } else { count += l1-i // 利用局部有序性 如{4,5,6} 与 {1,2},对于元素1则有3个逆序对 tmp = append(tmp, r[j]) j++ } } tmp = append(tmp, l[i:]...) tmp = append(tmp, r[j:]...) return tmp }