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

class Solution {
public:
    int MergeSort(vector <int> &arr, vector <int> &temp, int low, int high) {
		// 停止划分
		if (low >= high)	return 0;
		int mid = (low + high) / 2;
		long count = MergeSort(arr, temp, low, mid) + MergeSort(arr, temp, mid + 1, high);
		int i,j,k;
		for (k = low; k <= high; ++k) {
			temp[k] = arr[k];
		}
		
		for (i = mid, j = high, k = high; i >= low && j > mid; --k) {
			if (temp[i] >= temp[j]) {
				arr[k] = temp[i];
				i--;
				count = count + j - mid;
			}
			else {
				arr[k] = temp[j];
				j--;
			}
		}
		while (i >= low) {
			arr[k] = temp[i];
			k--;	i--;
			}
		while (j > mid) {
			arr[k] = temp[j];
			k--;	j--;
		}
		return count % 1000000007;
	}
    int InversePairs(vector<int> data) {
		vector <int> temp(data.size());
		return MergeSort(data, temp, 0, data.size() - 1);
    }
};

全部评论

相关推荐

04-14 20:10
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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