Reverse Pairs
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.
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相关推荐
- [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 ...
- [Swift]LeetCode493. 翻转对 | Reverse Pairs
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- leetcode练习 Reverse Pairs
几次练手之后,决定进军hard难度 最近的课程主要讲的是分治,就选择了相关的题目. Given an array nums, we call (i, j) an important reverse p ...
- 493 Reverse Pairs
我們在進行歸併排序的時候,會對兩個有序數組進行比較. 如果a1 比 b4 大, 那麼b1,b2,b3 都會比a1小. 利用這個邏輯,我們就可以嘗試一次批量獲取所有比a1大的數. 並且,如果我們能夠確認 ...
- Pytorch系列教程-使用Seq2Seq网络和注意力机制进行机器翻译
NLP FROM SCRATCH: TRANSLATION WITH A SEQUENCE TO SEQUENCE NETWORK AND ATTENTION Author: Sean Roberts ...
- PyTorch: 序列到序列模型(Seq2Seq)实现机器翻译实战
版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢!http://blog.csdn.net/m0_37306360/article/details/79318644 简介 在这个项目中,我们 ...
- pytorch记录:seq2seq例子看看这torch怎么玩的
https://blog.csdn.net/nockinonheavensdoor/article/details/82320580 先看看简单例子: import torch import torc ...
- 神经网络中的注意力机制总结及PyTorch实战
技术交流 QQ 群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 0.概述 当神经网络来处理大量的输入信息时,也可以借助人脑的注意力机制,只选择一些关键 ...
- Merge Sort及其对一类问题的应用
1.归并排序 O(nlogn) stable #include <iostream> #include <vector> using namespace std;void me ...
最新文章
- 关于部署osd过程中:Device is in use by a device-mapper mapping问题解决
- POJ_2001_Shortest Prefixes
- nginx加密,访问接口认证
- 32和64位系统各内置类型所占字节大小(int char long double 指针等)
- windows NT的意义和各个版本
- 测试教程网.unittest教程.6. 命令行接口
- FAR,FRR,EER
- python编写下载器可暂停_Python编写一个优美的下载器
- 造轮子,常用JS处理HTML工具(HTMLUtils)
- 21天Jmeter打卡Day18 前置处理器_熟悉常用组件
- Vue 事件绑定 事件修饰符 条件判断 循环遍历
- EP100的局部地址、逻辑地址和全局地址
- 微管理:给你一个技术团队,你该怎么管札记-化繁为简
- 【NOIP2016提高A组五校联考4】ksum
- ECTouch多语言插件,ECSHOP手机版多语言翻译,ecshop手机端多国语言翻译切换,ECSHOP网站多语言切换
- 统计学简介之一——统计量
- 创业公司天使轮、A轮、B轮、IPO融资时股权问题
- 可怕!9岁男孩为买任天堂游戏机,竟然...
- C#与Halcon联合编程 1
- html 滚动图片代码
热门文章
- windows c++版faster-rcnn
- Web前端 Javascript笔记(1)数组
- SVM支持向量机习题解答
- 深度学习李宏毅PPT学习笔记一(深度学习介绍)
- idea swagger生成接口文档_Spring Boot(九)Swagger2自动生成接口文档和Mock模拟数据...
- 【Twitter】时序图神经网络
- 激活函数详解/为什么要用激活函数
- NFT平台Polkamon将于3月31日在Polkastarter进行IDO
- Aave 上线 AMM Market,允许 Uniswap 和 Balancer 的流动性提供商使用 LP 代币作为抵押品
- SAP License:心情