文化馆网站建设解决方案深圳专业网站设计公司
文化馆网站建设解决方案,深圳专业网站设计公司,广告联盟怎么接单,旅游电子商务网站有哪些1. 题目
在数组中的两个数字#xff0c;如果前面一个数字大于后面的数字#xff0c;则这两个数字组成一个逆序对。输入一个数组#xff0c;求出这个数组中的逆序对的总数。
示例 1:
输入: [7,5,6,4]
输出: 5限制#xff1a;
0 数组长度 50000来源#xff1a;力…1. 题目
在数组中的两个数字如果前面一个数字大于后面的数字则这两个数字组成一个逆序对。输入一个数组求出这个数组中的逆序对的总数。
示例 1:
输入: [7,5,6,4]
输出: 5限制
0 数组长度 50000来源力扣LeetCode 链接https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。
2. 归并排序 详见 LeetCode 315. 计算右侧小于当前元素的个数二叉查找树二分查找归并排序逆序数总结 方法1后半部出队写入临时数组时sum 前半部 没有出来的个数(比后部出队的那个大) 方法2前半部出队sum 后半部 已经出队的数量(比出队的那个小)有后续操作当后半部全部出队了完毕前半部继续出队整个后半部分都比剩余的前半部分小。
两种方法只能取其一。
class Solution {int sum 0;vectorint temp;
public:int reversePairs(vectorint nums) {temp.resize(nums.size());mergesort(nums,0,nums.size()-1);return sum;}void mergesort(vectorint arr, int l ,int r){if(l r)return;int mid l ((r-l)1);mergesort(arr,l,mid);mergesort(arr,mid1,r);merge(arr,l,mid,r);}void merge(vectorint arr, int l, int mid, int r){int i l, j mid1, k 0;// 方法1后半部出队sum前半部 没有出来的个数(比后面大的)while(i mid j r){if(arr[i] arr[j])temp[k] arr[i];else{temp[k] arr[j];sum mid-i1;}}while(i mid)//后面都出完了前半部还剩一些temp[k] arr[i];while(j r)temp[k] arr[j];for(i l,j 0; j k; )arr[i] temp[j];//---------------------------------------------------//方法2前半部出队sum 后半部 已经出队的数量(比前面的小)while(i mid j r){if(arr[i] arr[j]){temp[k] arr[i];sum j-(mid1);}elsetemp[k] arr[j];}while(i mid)//后面都出完了前半部还剩一些还需要操作{temp[k] arr[i];sum j-(mid1);}while(j r)temp[k] arr[j];for(i l, j 0; j k; )arr[i] temp[j];}
};
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/90219.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!