给定一个数组 nums ,如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对。

你需要返回给定数组中的重要翻转对的数量。

示例 1:

输入: [1,3,2,3,1]
输出: 2

代码

class Solution {public int reversePairs(int[] nums) {return getReversePairs(nums,0,nums.length-1);}public int getReversePairs(int[] nums,int l,int r) {if(l>=r) return 0;int mid=(l+r)/2;int ret=getReversePairs(nums, l, mid)+getReversePairs(nums, mid+1, r);//将左右数组排序,并统计结果int i=l,j=mid+1;while (i<=mid)//统计左右数组的反转对{while (j<=r&&(long)nums[i]>2*(long)nums[j])j++;ret+=j-mid-1;i++;}int []temp=new int[r-l+1];int p=0,p1=l,p2=mid+1;while (p1<=mid||p2<=r)//归并{if(p1>mid)temp[p++]=nums[p2++];else if(p2>r)temp[p++]=nums[p1++];else if(nums[p1]>=nums[p2])temp[p++]=nums[p2++];else temp[p++]=nums[p1++];}for(int k=0;k<temp.length;k++) nums[l+k]=temp[k];//写回原来数组return ret;}
}

leetcode 493. 翻转对(分治算法)相关推荐

  1. 七十六、Python | Leetcode二分查找和分治算法系列

    @Author:Runsen @Date:2020/7/4 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  2. Java实现 LeetCode 493 翻转对

    493. 翻转对 给定一个数组 nums ,如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对. 你需要返回给定数组中的重要翻转对的数 ...

  3. LeetCode 493. 翻转对(归并排序)

    1. 题目 给定一个数组 nums ,如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对. 你需要返回给定数组中的重要翻转对的数量. ...

  4. C#LeetCode刷题-分治算法

    分治算法篇 # 题名 刷题 通过率 难度 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)-该题未达最优解 30 ...

  5. Leetcode快速入门之第三节课: 分治算法

    文章目录 1. 算法引入 2. 分治算法之归并排序 2.1 88题:合并两个有序数组 3. 分治算法之快速排序 3.1 Leetcode 215 Kth Largest Element in an A ...

  6. 搞定面试算法系列 | 分治算法三步走

    戳蓝字"CSDN云计算"关注我们哦! 作者 | 江子抑 转自 | 编程拯救世界 主要思想 分治算法,即分而治之:把一个复杂问题分成两个或更多的相同或相似子问题,直到最后子问题可以简 ...

  7. 【Datawhale】之LeetCode分类练习(分治)

    分治介绍 主要思想 分治算法的主要思想是将原问题递归地分成若干个子问题,直到子问题满足边界条件,停止递归.将子问题逐个击破(一般是同种方法),将已经解决的子问题合并,最后,算法会层层合并得到原问题的答 ...

  8. 分治算法小结(附例题详解)

    分治算法小结(附例题详解) 我的理解: 分治算法我的理解就是看人下菜碟,我们要解决的问题就好像一群人构成的集体,要我们解决这个问题,那我们就要满足这群人里面每个人不同的需求,也就是写出解决的代码,把每 ...

  9. Leetcode分类解析:组合算法

    Leetcode分类解析:组合算法 所谓组合算法就是指:在解决一些算法问题时,需要产生输入数据的各种组合.排列.子集.分区等等,然后逐一确认每种是不是我们要的解.从广义上来说,组合算法可以包罗万象,甚 ...

最新文章

  1. python wget_python-如何获取wget下载的文件的文件名
  2. 重大合同实为旧事 数据港信披被上交所问询
  3. 高红冰:“五新”创新乡村商业实践
  4. WIN7 不用格式化磁盘怎么把FAT32系统改成NTFS系统
  5. TessorFlow学习 之 序言
  6. 如何从XMLHttpRequest创建自定义获取API
  7. 射击比赛(java)
  8. window下的免安装redis
  9. html中radio实现互斥
  10. symantec backup exec 2010 oracle 12,Symantec Backup Exec 2010在Windows平台下Oracle备份详细配置步骤...
  11. TFTPD32不能传输数据的解决与尝试
  12. cocos2d-x打印log
  13. 【送书活动第二话】:共10本技术书籍送! 送!! 送!!!
  14. Grub引导项修复详解
  15. 基于DLNA的移动端网络视频投屏技术
  16. 80x86 微处理器
  17. 儒猿秒杀季!ZooKeeper从0基础到源码级大神课
  18. 【jQuery】 # jQuery选择器
  19. Ubuntu zhuang SSH
  20. Python 语感训练100题(参考答案)

热门文章

  1. 如何在Ubuntu上安装GCC编译器
  2. gcc与g++编译器
  3. WinPcap笔记(10):从堆文件中读取数据包
  4. Java开发框架!阿里大牛亲手操刀微服务架构实战
  5. 【大牛系列教学】靠着这份面试题跟答案
  6. 随笔--互联网进化论
  7. django权限二(多级菜单的设计以及展示)
  8. 谷歌+安卓,他已经改变了世界两次,但还想多来几次
  9. PIL简单图片处理(上)
  10. Java第二次实验报告——Java面向对象程序设计