首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

数组逆序

题目描述 在数组的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序。输入一个数组,求出这个数组逆序的总数P。并将P1000000007取模的结果输出。...例如7,5,4,6可以划分为两段7,5和4,6两个子数组 在7,5求出逆序,因为7大于5所以有1 在6,4求出逆序,因为6大于4所以逆序再加1,为2 7,5和6,4进行排序,结果为5,7,...和4,6 设置两个指针分别指向两个子数组的最大值,p1指向7,p2指向6 比较p1和p2指向的值,如果大于p2,因为p2指向的是最大值,所以第二个子数组中有几个元素就有几逆序(当前有两个元素,逆序加...,所以子数组没有能和当前p2指向的6构成逆序的数,将p2指向的值放入辅助数组,并向前移动一位指向4,此时辅助数组内为6,7 继续判断p1(指向5)和p2(指向4),5>4,第二个子数组只有一个数字...辅助数组此时为4,5,6,7.逆序为5.

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

数组逆序

题目: 在数组的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序。输入一个数组,求出这个数组逆序的总数。...解法一:暴力法 统计数组逆序逆序,可以使用暴力的方法,即顺序扫描整个数组,每扫描到一个数字的时候,逐个与该数字后面的数字比较大小,如果大于后面的某个数字,则形成一个逆序。...因此从整个数组拆分过程,我们将它不断进行拆分,而拆分得到的两个数组,这样可以想到递归解决问题。 那么加入了逆序后,如何考虑呢,实际上很简单。...以从最下面的含一个元素的数组,到上层含多个元素的数组都有前后之分,这正好与逆序性质相符,只要我们找出前面那一个数组假设L[i] 大于后面一个数组某个元素R[j],然后就知道前面那个数组在该元素L[...A存在逆序对数 para:A:待统计数组;len:数组A的长度;inversePairsCount:逆序对数 ret:void ************************************

96710

剑指offer 36 数组逆序

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27520535 题目描述:在数组的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序...输入一个数组,求出这个数组逆序的总数。输入: 每个测试案例包括两行: 第一行包含一个整数n,表示数组的元素个数。其中1 <= n <= 10^5。...第二行包含n个整数,每个数组均为int类型。 输出:对应每个测试案例,输出一个整数,表示数组逆序的总数。...理解了思路,就不难了,将数组划分成两个子数组,再将子数组分别划分成两个子数组,统计每个子数组内的逆序个数,并将其归并排序,再统计两个子数组之间的逆序个数,并进行归并排序。...,使其有序排列 for(i=end;i>k;i--)           arr[i] = brr[i];   return count;   }   /* 统计数组的所有的逆序

63910

【剑指offer】35.数组逆序

题目 在数组的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序。输入一个数组,求出这个数组逆序的总数P。并将P1000000007取模的结果输出。...即输出P%1000000007 输入描述:题目保证输入的数组没有的相同的数字 数据范围: 对于%50的数据,size<=10^4 对于%75的数据,size<=10^5 对于%100的数据,size<...=2*10^5 示例1 输入 1,2,3,4,5,6,7,0 输出 7 ---- 分析 这道题属于最佳单的思路就是对数组建遍历,找到每个元素之后比自己小的元素个数,但这种思路的时间复杂度为 O(...主要思路如下: 把数据分成前后两个数组(递归分到每个数组仅有一个数据项); 合并数组,合并时,出现前面的数组值array[i]大于后面数组值array[j]时;则前面数组array[i]~array[mid...]都是大于array[j]的,count += mid+1 - i github链接: JZ35-数组逆序 ---- C++代码 #include #include <vector

60140

golang刷leetcode 技巧(37)数组逆序

数组的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序。输入一个数组,求出这个数组逆序的总数。...就以arr = [7,5,6,4]这个例子来讲解为什么一遍归并排序就看可以解决逆序的问题。...arrLL7及其之后的所有数字都大于arrLR的5, 也就是说7及其之后的所有元素都可以与5组成逆序, 所以此时7及其之后的所有元素个数(leftLen - i)即我们要的逆序对数,需要添加到结果...sum。...i); 5 < 6,正常排序,不做处理 7 > 6,说明7及其之后的所有元素都能与6组成逆序;所以sum += (leftLen - i); 7,正常排序,不作处理 最后sum就是所有逆序的总个数!

23220

树状数组逆序以及相关例题

逆序有两种方法:归并排序和树状数组,但是归并排序求得的逆序是总共的逆序对数量,有些时候我们需要求得某个数后面的逆序对数量或者某个数前面的逆序对数量。...这个时候我们就需要使用树状数组来求逆序,使用树状数组的优势在于码量少,容易调试。但是如果值域大的话,需要进行离散化。...树状数组逆序的核心代码如下: //sum[i]为位置i的逆序对数量 for(int i=n;i>=1;i--){ sum[i]=query(a[i]-1); //获取[1,a[i]-1]区间内比...其次,每个小朋友交换的次数等于每个小朋友前面比该小朋友大的个数和每个小朋友后面比该小朋友小的个数,即该小朋友前的逆序对数量和该小朋友后的逆序对数量。...所以我们可以用树状数组来维护每个小朋友之前的逆序对数量和每个小朋友之后的逆序对数量,最后统计答案即可。

48320

LeetCode-面试题51-数组逆序

# LeetCode-面试题51-数组逆序数组的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序。输入一个数组,求出这个数组逆序的总数。...示例1: 输入: [7,5,6,4] 输出: 5 说明: 0 <= 数组长度 <= 50000 # 解题思路 方法1、暴力破解(超时): 两个指针循环判断后面的数是不是小于前面的数,是就+1,但这样超时了...,一个数字不能组成逆序数,因此这个区间的逆序数为0 在跨区间逆序数计算时,如果左边区间比较小就需要先把左边区间的数放入temp数组,这个时候代表左边的数比又边的数小,但此时不是逆序的关系,不需要统计逆序...;只有当右边区间比左边区间小的时候,需要统计逆序个数,此时的逆序个数为,左边区间还剩下的数的个数即mid-left+1 # Java代码 class Solution { public int...left, mid, temp); int rightPairs = MergeSort(nums, mid + 1, right, temp); // 如果分出来的数组本身有序

21020

剑指offer | 面试题38:数组逆序

数组逆序 “题目描述 :在数组的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序。输入一个数组,求出这个数组逆序的总数。...方法二:归并排序 先归并,再统计逆序的个数。 「归并排序」与「逆序」是息息相关的。...“如下图所示,为左子数组 [2, 3, 6, 7] 与 右子数组 [0, 1, 4, 5] 的合并与逆序统计过程。...merge_ sort() , 并返回逆序总数即可; 如下图所际,为数组[7, 3,2, 6, 0,1, 5, 4]的归并排序与逆序统计过程。...数组逆序 * 在数组的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序。 * 输入一个数组,求出这个数组逆序的总数。

97120

每日一题《剑指offer》数组篇之数组逆序

今日题目链接: 数组逆序 数组逆序 难度:中等 描述 在数组的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序。输入一个数组,求出这个数组逆序的总数P。...merge(divide(left, mid, data, temp), divide(mid + 1, right, data, temp)); 这里我们也可以用相同的方法划分,划分之后相邻一个元素的子数组就可以根据大小统计逆序...,而不断往上合并的时候,因为已经排好序了,我们逆序可以往上累计。...step 1: 划分阶段:将待划分区间从中点划分成两部分,两部分进入递归继续划分,直到子数组长度为1. step 2: 排序阶段:使用归并排序递归地处理子序列,同时统计逆序,因为在归并排序,我们会依次比较相邻两组子数组各个元素的大小...step 3: 合并阶段:将排好序的子序列合并,同时累加逆序

16151
领券