題目:
對於50\%50%的數據,size\leq 10^4size≤104
對於75\%75%的數據,size\leq 10^5size≤105
對於100\%100%的數據,size\leq 2*10^5size≤2∗105
思路:排序--計算交換次數
考慮一下,逆序是說a[i]>a[j],i < j。那麼在排序的過程中,會把a[i]和a[j]交換過來,這個交換的過程,每交換一次,就是一個逆序對的“正序”過程。
func InversePairs(nums []int) int { res := mergeSort(nums, 0, len(nums)-1) % 1000000007 return int(res) } func mergeSort(nums []int, start, end int) int64 { if start >= end { return 0 } mid := start + (end - start)/2 cnt := mergeSort(nums, start, mid) + mergeSort(nums, mid + 1, end) tmp := []int{} i, j := start, mid + 1 for i <= mid && j <= end { if nums[i] <= nums[j] { tmp = append(tmp, nums[i]) cnt += int64(j - (mid + 1)) i++ } else { tmp = append(tmp, nums[j]) j++ } } for ; i <= mid; i++ { tmp = append(tmp, nums[i]) cnt += int64(end - (mid + 1) + 1) } for ; j <= end; j++ { tmp = append(tmp, nums[j]) } for i := start; i <= end; i++ { nums[i] = tmp[i - start] } return cnt }