For an array A, if i < j, and A [i] > A [j], called (A [i], A [j]) is a reverse pair.
return total of reverse pairs in A.

Example

Given A = [2, 4, 1, 3, 5] , (2, 1), (4, 1), (4, 3) are reverse pairs. return 3

分析:

如果用两个for loop,非常简单。但要降低复杂度,做法非常变态.简单来说,原理就是利用merge sort的方法,把左subarray 和右subarray 合并(假设它们都已排好序)。然后比较当前左subarray的第一个值是否比右边subarray第一个值大两倍,如果是,那么很明显左subarray所有的都比那个值大两倍。

 1 class Solution {
 2     public int reversePairs(int[] nums) {
 3         return mergeSort(nums, 0, nums.length - 1);
 4     }
 5
 6     public int mergeSort(int[] nums, int start, int end) {
 7         if (start >= end) return 0;
 8         int total =  0;
 9         int mid = start + (end - start) / 2;
10         total += mergeSort(nums, start, mid);
11         total += mergeSort(nums, mid + 1, end);
12         total += merge(nums, start, mid, end);
13         return total;
14     }
15
16     public int merge(int[] nums, int start, int mid, int end) {
17         int[] temp = new int[end - start + 1];
18         int p1 = start, p2 = mid + 1;
19         int index = 0,count = 0;
20
21         while (p1 <= mid && p2 <= end) {
22             if ((long) nums[p1] > 2 * ((long) nums[p2])) {
23                 count += mid - p1 + 1;
24                 p2++;
25             } else {
26                 p1++;
27             }
28         }
29         p1 = start;
30         p2 = mid + 1;
31         while (p1 <= mid && p2 <= end) {
32             if (nums[p1] < nums[p2]) {
33                 temp[index++] = nums[p1++];
34             } else {
35                 temp[index++] = nums[p2++];
36             }
37         }
38
39         while(p1 <= mid) {
40             temp[index++] = nums[p1++];
41         }
42         while(p2 <= end) {
43             temp[index++] = nums[p2++];
44         }
45         System.arraycopy(temp, 0, nums, start, end - start + 1);
46         return count;
47     }
48 }

转载于:https://www.cnblogs.com/beiyeqingteng/p/5645563.html

Reverse Pairs相关推荐

  1. [LintCode] Reverse Pairs 翻转对

    For an array A, if i < j, and A [i] > A [j], called (A [i], A [j]) is a reverse pair. return t ...

  2. [Swift]LeetCode493. 翻转对 | Reverse Pairs

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  3. leetcode练习 Reverse Pairs

    几次练手之后,决定进军hard难度 最近的课程主要讲的是分治,就选择了相关的题目. Given an array nums, we call (i, j) an important reverse p ...

  4. 493 Reverse Pairs

    我們在進行歸併排序的時候,會對兩個有序數組進行比較. 如果a1 比 b4 大, 那麼b1,b2,b3 都會比a1小. 利用這個邏輯,我們就可以嘗試一次批量獲取所有比a1大的數. 並且,如果我們能夠確認 ...

  5. Pytorch系列教程-使用Seq2Seq网络和注意力机制进行机器翻译

    NLP FROM SCRATCH: TRANSLATION WITH A SEQUENCE TO SEQUENCE NETWORK AND ATTENTION Author: Sean Roberts ...

  6. PyTorch: 序列到序列模型(Seq2Seq)实现机器翻译实战

    版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢!http://blog.csdn.net/m0_37306360/article/details/79318644 简介 在这个项目中,我们 ...

  7. pytorch记录:seq2seq例子看看这torch怎么玩的

    https://blog.csdn.net/nockinonheavensdoor/article/details/82320580 先看看简单例子: import torch import torc ...

  8. 神经网络中的注意力机制总结及PyTorch实战

    技术交流 QQ 群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 0.概述 当神经网络来处理大量的输入信息时,也可以借助人脑的注意力机制,只选择一些关键 ...

  9. Merge Sort及其对一类问题的应用

    1.归并排序 O(nlogn) stable #include <iostream> #include <vector> using namespace std;void me ...

最新文章

  1. 关于部署osd过程中:Device is in use by a device-mapper mapping问题解决
  2. POJ_2001_Shortest Prefixes
  3. nginx加密,访问接口认证
  4. 32和64位系统各内置类型所占字节大小(int char long double 指针等)
  5. windows NT的意义和各个版本
  6. 测试教程网.unittest教程.6. 命令行接口
  7. FAR,FRR,EER
  8. python编写下载器可暂停_Python编写一个优美的下载器
  9. 造轮子,常用JS处理HTML工具(HTMLUtils)
  10. 21天Jmeter打卡Day18 前置处理器_熟悉常用组件
  11. Vue 事件绑定 事件修饰符 条件判断 循环遍历
  12. EP100的局部地址、逻辑地址和全局地址
  13. 微管理:给你一个技术团队,你该怎么管札记-化繁为简
  14. 【NOIP2016提高A组五校联考4】ksum
  15. ECTouch多语言插件,ECSHOP手机版多语言翻译,ecshop手机端多国语言翻译切换,ECSHOP网站多语言切换
  16. 统计学简介之一——统计量
  17. 创业公司天使轮、A轮、B轮、IPO融资时股权问题
  18. 可怕!9岁男孩为买任天堂游戏机,竟然...
  19. C#与Halcon联合编程 1
  20. html 滚动图片代码

热门文章

  1. windows c++版faster-rcnn
  2. Web前端 Javascript笔记(1)数组
  3. SVM支持向量机习题解答
  4. 深度学习李宏毅PPT学习笔记一(深度学习介绍)
  5. idea swagger生成接口文档_Spring Boot(九)Swagger2自动生成接口文档和Mock模拟数据...
  6. 【Twitter】时序图神经网络
  7. 激活函数详解/为什么要用激活函数
  8. NFT平台Polkamon将于3月31日在Polkastarter进行IDO
  9. Aave 上线 AMM Market,允许 Uniswap 和 Balancer 的流动性提供商使用 LP 代币作为抵押品
  10. SAP License:心情