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

案例:数组逆序

在讲解数组逆序之前,我们需要了解这么一个需求,就是如何完成数组元素的交换。...好了那么现在我们要做的是这么一件事,将一个数组中的所有元素完成逆序,注意并不是逆序打印,而是真正做到将数组中的所有元素翻转一下。...那么应该怎么做 假设我们现在有一个数组 ,里面有5个元素{1,2,3,4,5},我们要做一个逆序,其实就是得到一个新的数组{5,4,3,2,1};通过对比可以发现,我们只需要将第一个元素...所以我们其实可以找到一个规律,就是任意一个元素要想实现逆序,需要交换的次数是 arr.length/2 次。这其实也是我们写的循环语句需要执行的次数。...arr[i] = arr[arr.length-1-i]; arr[arr.lentgh-1-i] = temp; } 对于数组逆序

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

【03】逆序数组

一、逆序函数是什么? 示例:输入1 4 7 9 3 输出:3 9 7 4 1 通俗来说就是将数组一行数据倒着打印。...i = 0;i <=j-1;i++) { printf("%d\n",arr[i]); } } int main() { reverse(); return 0; } 2.创建临时数组逆序...i > 0; i--) //{ // arr[j] = arr[j - 1];//循环逆转 //} //arr[0] = tmp;//将第一个储存最后一个数完成逆转 //创建临时数组实现逆序...} for(i = 0;i <=j-1;i++)//打印逆序后的数组 { printf("%d\n",arr[i]); } } int main() { reverse();...return 0; } 三、结言 以上就是C语言实现逆序数组完整实现啦~土土这里用了两种方法一种是直接发利用左右两个指针来遍历,另一种是创建临时数组来将原来的数组中的数从后往前放置,两种方法各有优缺点哦

6010

数组中的逆序

题目: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。...解法一:暴力法 统计数组中的逆序对的逆序对,可以使用暴力的方法,即顺序扫描整个数组,每扫描到一个数字的时候,逐个与该数字后面的数字比较大小,如果大于后面的某个数字,则形成一个逆序对。...以从最下面的含一个元素的数组,到上层含多个元素的数组都有前后之分,这正好与逆序对性质相符,只要我们找出前面那一个数组中假设L[i] 大于后面一个数组中某个元素R[j],然后就知道前面那个数组在该元素L[...para:a:左有序字数组;lenA:左有序字数组长度;b:右有序字数组;lenB:右有序字数组长度;inversePairsCount:相邻有序字数组a和b之间存在的逆序对数 return:void...A中存在逆序对数 para:A:待统计数组;len:数组A的长度;inversePairsCount:逆序对数 ret:void ************************************

96710

数组中的逆序

题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。...例如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指向的是最大值,所以第二个子数组中有几个元素就有几对逆序对(当前有两个元素,逆序对加...,逆序对加1,4+1=5,为5对,然后将5放入辅助数组,第一个子数组遍历完毕,只剩下第二个子数组,当前只有一个4,将4也放入辅助数组,函数结束。...辅助数组此时为4,5,6,7.逆序对为5.

1.2K20

树状数组 _ 求逆序

注: 本文只是记录 ,您将从上面学习不到任何知识,除了 代码 (废话)第一次接触到树状数组,感觉接触到了新世界,理解这个思想用了好长时间,终于弄明白了(似懂非懂)。...还有接触到了 离散化的思想, 逆序数 , 感觉数学这么有用 问题 A: 最少的交换 时间限制: 1 Sec 内存限制: 32 MB 提交: 157 解决: 47 [提交][状态][讨论版][命题人...:外部导入] 题目描述 现在给你一个由n个互不相同的整数组成的序列,现在要求你任意交换相邻的两个数字,使序列成为升序序列,请问最少的交换次数是多少?...样例输入 5 9 1 0 5 4 3 1 2 3 0 样例输出 6 0 import java.util.Arrays; import java.util.Scanner; /** * 树状数组

43940

数组逆序和冒泡排序方法

数组逆序 数组元素逆序 (就是把元素对调) 分析:                  A:定义一个数组,并进行静态初始化。                 ...      { inttem = arr[i]; arr[i] = arr[arr.length-1-i]; arr[arr.length-1-i] = tem;       }  } 选择排序 给定一个数组...arr[y] = temp;               }           }       }  } 冒泡排序 int[] arr={24,69,80,57,13} 冒泡排序的概念 将一个数组中的元素...,两两进行比较,大的往后面放,第一轮比较完成后,数组中最大值得元素会放在数组最大索引的位置, 同理,以此类推,最终会得出一个排序好的数组 冒泡排序的规律: 规律:1)两两比较,数组的最大值在最后面        ...第一次比较,有0个元素不比较 第二次比较,有1个元素不比较 第三次比较,有2个元素不比较               ..................       3)总共需要比较的长度是 数组

52930

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

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

48320

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

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

54600

K个逆序数组(DP)

题目 给出两个整数 n 和 k,找出所有包含从 1 到 n 的数字,且恰好拥有 k 个逆序对的不同的数组的个数。...逆序对的定义如下:对于数组的第i个和第 j个元素,如果满i a[j],则其为一个逆序对;否则不是。 由于答案可能很大,只需要返回 答案 mod 109 + 7 的值。...示例 1: 输入: n = 3, k = 0 输出: 1 解释: 只有数组 [1,2,3] 包含了从1到3的整数并且正好拥有 0 个逆序对。...示例 2: 输入: n = 3, k = 1 输出: 2 解释: 数组 [1,3,2] 和 [2,1,3] 都有 1 个逆序对。...f(i - 1, j)插在最后,逆序增加0,插在倒数第1个前面,逆序数为1,为保持总逆序数j,那i-1个数的逆序数为j-1,依次类推 f(i,j)=f(i−1,j)+f(i−1,j−1)+...

93020

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券