给定一个数组num,返回数组中的反向对个数。
来源:互联网 发布:闲来陕西麻将源码 编辑:程序博客网 时间:2024/06/06 04:22
本题源自leetcode 493
-------------------------------------------------------------------------------------
反向对:我们称(i,j)是一个重要的反向对,如果i <j且nums [i]> 2 * nums [j]。
思路:利用归并排序的思想。先求出左半部分和右半部分的反向对个数。在归并计算
代码:
int reversePairs(vector<int>& nums) { if(nums.size()<2) return 0; return sortAndCount(nums.begin(),nums.end()); } int sortAndCount(vector<int>::iterator begin,vector<int>::iterator end){ if(end - begin < 2) return 0; auto mid=begin+(end-begin)/2; int count=sortAndCount(begin,mid)+sortAndCount(mid,end); for(auto i=begin,j=mid; i != mid; i++){ while(j!=end && *i > 2L * *j) //long型 j++; count += j-mid; } inplace_merge(begin,mid,end); //归并排序 return count; }
代码:
int count; int reversePairs(vector<int>& nums) { if(nums.size()<2) return 0; count = 0; mergeSort(nums,0,nums.size()-1); return count; } void mergeSort(vector<int>& nums,int start,int end){ if(start == end) return; int mid = (start + end) >> 1; mergeSort(nums,start,mid); mergeSort(nums,mid+1,end); checkCount(nums,start,mid,end); } void checkCount(vector<int>& nums,int start,int mid,int end){ int l=start; int r=mid+1; while(l <= mid && r <= end){ if(nums[l] > nums[r] * 2L){ count += mid-l+1; r++; }else{ l++; } } sort(nums.begin()+start,nums.begin()+end+1); }
阅读全文
0 0
- 给定一个数组num,返回数组中的反向对个数。
- 给定一个数组获取数组中的最大值
- 给定一个数组,返回这个数组的所有子数组
- 给定一个数组,找出数组的峰值。返回其下标
- 给定一个数组,对该数组进行全排列
- 给定一个无序数组,找到其中最小的K个数
- 给定一个数组,返回最大子数组的累加和并且返回该子数组
- 写出一个算法,对给定的n个数的序列,返回序列中的最大和最小的数
- 中位数 21% 通过 给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数
- 返回给定值在有序数组中的插入位置
- 求一个数组中的逆序个数
- 给定一个整型数组,求数组元素大于等于所有元素平均值的元素个数
- 对给定数组进行排序
- 求给定的两个数组的公共元素,并将其返回为一个数组
- 给定一个整数数组,返回数组中两个元素的和为target的索引
- 找出数组中的逆序对的个数,既前一个数比后一个数大组成逆序对。
- 给定一个数组,值全是正数,请返回累加和为给定值k的最长子数组长度。
- 题目二:给定一个数组,值全是正数,请返回累加和为给定值k的最长子数组长度。
- PAT乙级1036 跟奥巴马一起学编程
- IDEA快捷键整理
- linux安装mysql5.7.20并登录
- 正确删除List中的元素
- ubuntu 的基本命令
- 给定一个数组num,返回数组中的反向对个数。
- 根据模板生成带有图片的 word 文档
- ubuntu14.04安装matlabR2013b
- iTunes12.7以后如何下载手机里App的IPA包
- git submodule的使用
- mysql 存储引擎
- uploadify 前端使用
- RESTFUI API
- springboot(五):spring data jpa的使用