LeetCode -Reverse Pairs

时间:2022-09-21 07:38:29

LeetCode -Reverse Pairs

my solution:

class Solution {
public:
int reversePairs(vector<int>& nums) {
int length=nums.size();
int count=;
for (int i=;i<length;i++)
{
for(int j=i+;j<length;j++)
{
if(nums[i]>2*nums[j])
count++;
}
}
return count;
}
};

wrong answer :

LeetCode -Reverse Pairs

because   2147483647*2 is -2 (int)  ,  only 33bit can represent

int 4 byte 32 bit

2147483647--2147483647  signed

0-4294967295  unsigned

long 4 byte 32 bit (在 32 位机器上与int 相同)
double 8 byte 64 bit   1.79769e+308 ~ 2.22507e-308
float 4 byte 32 bit   3.40282e+038 ~ 1.17549e-038
long double 12 byte 96 bit  1.18973e+4932 ~ 3.3621e-4932

then i change the type to double:

class Solution {
public:
int reversePairs(vector<int>& nums) {
int length=nums.size();
int count=;
double a;
for (int i=;i<length;i++)
{
for(int j=i+;j<length;j++)
{
a=(double)*nums[j];
if(nums[i]>a)
count++;
}
}
return count;
}
};

wrong:

LeetCode -Reverse Pairs

because the if the maxmise length is 50000, the process will lead to time exceed .

对于这类问题,一种很好的解法就是拆分数组来解决子问题,通过求解小问题来求解大问题。

有两类拆分方法:

  • 顺序重现(sequential recurrence relation):T(i, j) = T(i, j - 1) + C
  • C就是处理最后一个数字的子问题,找 T(i, j - 1)中的reverse pairs, T(i, j-1) 有序,只需要找大于2*nums[j]的数。     二分查找已经不满足条件了,只能使用Binary indexed tree 来实现。BIT的存储方式不是数组对应一一存入,而是有的对应存入,有的存若干个数字之和,其设计的初衷是在O(lgn)时间复杂度内完成求和运算。
  • 分割重现(Partition Recurrence relation):T(i, j) = T(i, m) + T(m+1, j) + C
  • C为合并两个部分的子问题。MergeSort的思想就是把数组对半拆分为子数组,柴刀最小的数组后开始排序,然后一层一层返回,得到有序的数组。时间复杂度O(nlogn)
class Solution {
public:
int reversePairs(vector<int>& nums) {
return mergeSort(nums, , nums.size() - );
}
int mergeSort(vector<int>& nums, int left, int right) {
if (left >= right) return ;
int mid = left + (right - left) / ;
int res = mergeSort(nums, left, mid) + mergeSort(nums, mid + , right);
for (int i = left, j = mid + ; i <= mid; ++i) {
while (j <= right && nums[i] / 2.0 > nums[j]) ++j;
res += j - (mid + );
}
sort(nums.begin() + left, nums.begin() + right + );
return res;
}
};

归并排序 MergeSort 和BIT可以解决,BST和 binary search不行

https://discuss.leetcode.com/topic/79227/general-principles-behind-problems-similar-to-reverse-pairsBST (binary search tree)

BIT (binary indexed tree)

LeetCode -Reverse Pairs的更多相关文章

  1. &lbrack;LeetCode&rsqb; Reverse Pairs 翻转对

    Reverse Pairs 翻转对 题意 计算数组里面下标i小于j,但是i的值要大于j的值的两倍的搭配的个数(也就是可能会有多种搭配):网址 做法 这道题显然是不允许使用最简单的方法:两次循环,逐次进 ...

  2. &lbrack;LeetCode&rsqb; 493&period; Reverse Pairs 翻转对

    Given an array nums, we call (i, j) an important reverse pair if i < j and nums[i] > 2*nums[j] ...

  3. &lbrack;LintCode&rsqb; Reverse Pairs 翻转对

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

  4. &lbrack;Swift&rsqb;LeetCode493&period; 翻转对 &vert; Reverse Pairs

    Given an array nums, we call (i, j) an important reverse pair if i < j and nums[i] > 2*nums[j] ...

  5. Reverse Pairs

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

  6. LeetCode&colon; Reverse Words in a String:Evaluate Reverse Polish Notation

    LeetCode: Reverse Words in a String:Evaluate Reverse Polish Notation Evaluate the value of an arithm ...

  7. 2016&period;5&period;16——leetcode&colon;Reverse Bits(超详细讲解)

    leetcode:Reverse Bits 本题目收获 移位(<<  >>), 或(|),与(&)计算的妙用 题目: Reverse bits of a given 3 ...

  8. LeetCode——Reverse String

    LeetCode--Reverse String Question Write a function that takes a string as input and returns the stri ...

  9. 493&period; Reverse Pairs&lpar;BST&comma; BIT&comma; MergeSort&rpar;

    Given an array nums, we call (i, j) an important reverse pair if i < j and nums[i] > 2*nums[j] ...

随机推荐

  1. Java基础之类Class使用

    大家都知道Java是一门面向对象编程语言,在Java世界里,万事万物皆对象,那个Java中怎么表示对象呢?Class 我们知道Java中的对象都是Object类的子类,那么今天我们就一起来研究一下Ja ...

  2. JQ关于浏览器宽高的获取方式

    JQ关于浏览器宽高的获取方式 alert($(window).height()); //浏览器时下窗口可视区域高度alert($(document).height()); //浏览器时下窗口文档的高度 ...

  3. 转:PCL&plus;VS2010环境配置

    1.下载 http://www.pointclouds.org/downloads/windows.html出下载PCL完全安装包1.6.0 all-in-one-installer,我的电脑是32位 ...

  4. Mybatis动态SQL

    1.动态SQL基本标签 •if •choose (when, otherwise) •trim (where, set) •foreach 2.IF 具体用法 <select id=" ...

  5. JFinal极速开发实战-业务功能开发-通用表单验证器

    提交表单数据时,需要经过前端的验证才能提交到后台,而后台的验证器再做一道数据的校验,成功之后才能进入action进行业务数据的处理. 在表单数据的验证中,数据类型的验证还是比较固定的.首先是对录入数据 ...

  6. java枚举&lpar;enum&rpar;

    1. 创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum (抽象类) 类的子类. enum AccountType { SAVING, FIXED, CURRE ...

  7. FOREIGN MySQL 之 多表查询

    一.多表联合查询 #创建部门 CREATE TABLE IF NOT EXISTS dept ( did int not null auto_increment PRIMARY KEY, dname ...

  8. android linux 休眠 深度睡眠 查看 方法 调试【转】

    本文转载自:https://blog.csdn.net/u011006622/article/details/72900552 在Android移动设备中,有时按下Power键(未接电源,USB)时, ...

  9. JDBC连接数据库的简单介绍

    休息10天后重新看了下jdbc,开始振作继续学习(休息10天主要是因为驾照考试太累,2333),希望自己能够调整好心态,继续对程序有着一如既往的喜爱(加油) Connection con=null; ...

  10. 《剑指offer》第五十四题(二叉搜索树的第k个结点)

    // 面试题54:二叉搜索树的第k个结点 // 题目:给定一棵二叉搜索树,请找出其中的第k大的结点. #include <iostream> #include "BinaryTr ...