LeetCode 493. 翻转对(归并排序)
发布日期:2021-07-01 03:15:40
浏览次数:2
分类:技术文章
本文共 1464 字,大约阅读时间需要 4 分钟。
1. 题目
给定一个数组 nums ,如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对。
你需要返回给定数组中的重要翻转对的数量。
输入: [1,3,2,3,1]输出: 2输入: [2,4,3,5,1]输出: 3
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-pairs 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2. 归并排序求解
- 参考
class Solution { int count = 0; int *temp;public: int reversePairs(vector & nums) { temp = new int[nums.size()]; rp(nums,0,nums.size()-1); return count; } void rp(vector & nums, int left, int right) { if(left >= right) return; int mid = (left+right)/2; rp(nums,left,mid); rp(nums,mid+1,right); merge(nums,left,mid,right); } void merge(vector & nums, int left, int mid, int right) { int i = left, j = mid+1, k; while(i <= mid && j <= right) { if((long)nums[i] > 2*long(nums[j])) { count += mid-i+1; j++; } else i++; }//先处理问题 //下面再排序 i = left, j = mid+1, k = left; while(i <= mid && j <= right) { if(nums[i] <= nums[j]) temp[k++] = nums[i++]; else temp[k++] = nums[j++]; } while(i <= mid) temp[k++] = nums[i++]; while(j <= right) temp[k++] = nums[j++]; for(i = left; i <= right; ++i) nums[i] = temp[i]; }};
转载地址:https://michael.blog.csdn.net/article/details/101236925 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月09日 07时13分59秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
CodeForces - 1042B Vitamins (思维)
2019-04-30
ACM 2013 长沙区域赛 Collision (几何)
2019-04-30
ACM 2014 鞍山区域赛 E - Hatsune Miku (dp)
2019-04-30
反向传播&梯度下降 的直观理解程序(numpy)
2019-04-30
ACM 2017 北京区域赛 J-Pangu and Stones(区间dp)
2019-04-30
java常用类 String面试题
2019-04-30
四线触摸屏原理
2019-04-30
C/C++如何返回一个数组/指针
2019-04-30
腾讯AI语音识别API踩坑记录
2019-04-30
java.net.BindException: 无法指定被请求的地址
2019-05-01
svn服务器安装
2019-05-01
spark 笔记1
2019-05-01
shell dirname basename
2019-05-01
未来已至,5G加持下的云游戏将走向何方?
2019-05-01
计算机网络 —— 网络层 1.
2019-05-01
Android 之 ContentProvider 与 ContentResolver
2019-05-01
【接口自动化】
2019-05-01
推荐一位川大零基础转行 Python 的人生勇士
2019-05-01
Python解惑之:True与False
2019-05-01
你要的微信小程序终于来了
2019-05-01