当前位置:网站首页>LeetCode—剑指 Offer 51. 数组中的逆序对
LeetCode—剑指 Offer 51. 数组中的逆序对
2022-07-02 09:43:00 【Ostrich5yw】
剑指 Offer 51. 数组中的逆序对
题目描述:[51]
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
考察重点:
第51题归并排序实现。在排序过程中,比较左右两数组元素大小时,计算逆序对个数。
第51题
class Solution {
int count = 0;
public int reversePairs(int[] nums) {
mergeSort(nums, 0, nums.length - 1);
return count;
}
public void mergeSort(int[] nums, int left, int right){
if(left >= right) return;
int mid = left + (right - left) / 2;
mergeSort(nums, left, mid);
mergeSort(nums, mid + 1, right);
merge(nums, left, mid, right);
}
public void merge(int[] nums, int left, int mid, int right){
int[] numsTemp = new int[right - left + 1];
int pointTemp = 0, pointR = mid + 1, pointL = left;
while(pointL <= mid || pointR <= right){
if(pointR > right || pointL > mid){
while(pointL <= mid){
numsTemp[pointTemp++] = nums[pointL ++];
}
while(pointR <= right){
numsTemp[pointTemp++] = nums[pointR ++];
}
break;
}
if(nums[pointL] > nums[pointR]){
count += (mid - pointL + 1);
numsTemp[pointTemp ++] = nums[pointR++];
}else{
numsTemp[pointTemp ++] = nums[pointL++];
}
}
for(int i = left;i <= right;i ++){
nums[i] = numsTemp[i - left];
}
}
}
边栏推荐
猜你喜欢
随机推荐
刷题---二叉树--2
全链路压测
SparkContext: Error initializing SparkContext解决方法
自然语言处理系列(一)——RNN基础
堆(优先级队列)
MySQL与PostgreSQL抓取慢sql的方法
Post request body content cannot be retrieved repeatedly
排序---
[untitled] how to mount a hard disk in armbian
Test shift left and right
This article takes you to understand the operation of vim
WSL 2 will not be installed yet? It's enough to read this article
Mysql database foundation
二分刷题记录(洛谷题单)区间的甄别
Leetcode122 买卖股票的最佳时机 II
SVO2系列之深度濾波DepthFilter
uniapp uni-list-item @click,uniapp uni-list-item带参数跳转
Leetcode14 最长公共前缀
K-Means Clustering Visualization in R: Step By Step Guide
Jenkins user rights management