【九度OJ1348】|【剑指offer36】数组中的逆序对
2019独角兽企业重金招聘Python工程师标准>>>
题目描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。输入:
输出:对应每个测试案例,输出一个整数,表示数组中的逆序对的总数。 样例输入:
4
7 5 6 4
样例输出:
5
方法一:
扫描整个数组逐个数字比较该数字和前面数字的大小,由于每个数字都要和O(n)个数字做比较,因此这个算法的时间复杂度是O(n2)。
import java.util.Scanner;/*** 数组中的逆序对* 2014年3月15日 20:44:15* @author aqia358* */
public class MainLM {public static void count(int[] a){long sum = 0;for(int i = 1; i < a.length; i++){int j = i;while(j > 0){if(a[j - 1] > a[i])sum++;j--;}}System.out.println(sum);}public static void main(String[] args) {
// int[] a = {7,5,6,4};
// int[] a = {9,8,7,6,5,4,3,2,1,0};
// MainLM.count(a);Scanner cin = new Scanner(System.in);while(cin.hasNext()){int n = cin.nextInt();int[] a = new int[n];for(int i = 0; i < n; i++){a[i] = cin.nextInt();}MainLM.count(a);}}
}
方法二:归并的思路
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;/*** 数组中的逆序对* 2014年3月15日 20:44:15* @author aqia358* */
public class Main {public static long num = 0;public static int[] result;public static void merge(int[] a, int begin, int end){if(begin != end){int center = (begin+end)/2;merge(a, begin, center);merge(a, center+1, end);int i = begin;int left = begin;int right = center+1;while(left <= center && right <= end){if(a[left] > a[right]){result[i++] = a[right++];num = num + center - left + 1;//最重要的一步}else{result[i++] = a[left++];}}while(left <= center ){result[i++] = a[left++];}while(right <= end){result[i++] = a[right++];}for(int j = begin; j <= end; j++){a[j] = result[j];}}}public static void main(String[] args) throws IOException {
// int[] a = {9,8,7,6,5,4,3,2,1,0};
// int[] a = {7,5,6,4};
// Main.merge(a, 0, a.length - 1);
// System.out.println(Main.num);
// Main.num = 0;StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));while(st.nextToken() != st.TT_EOF){int m = (int) st.nval;int[] a = new int[m];Main.result = new int[m];for(int i = 0; i < m; i++){st.nextToken();a[i] = (int) st.nval;}Main.merge(a, 0, a.length - 1);System.out.println(Main.num);Main.num = 0;}}
}/**************************************************************Problem: 1348User: aqia358Language: JavaResult: AcceptedTime:1270 msMemory:43652 kb
****************************************************************/
转载于:https://my.oschina.net/u/1182234/blog/209052
【九度OJ1348】|【剑指offer36】数组中的逆序对相关推荐
- 剑指Offer_35_数组中的逆序对
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...
- 剑指offer 数组中的逆序对
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...
- 2021-09-03剑指Offer51.数组中的逆序对
class Solution {int[] nums, tmp;//表示未分配长度的数组指针?//java的默认权限是共有还是私有?public int reversePairs(int[] nums ...
- 剑指offer35——数组中的逆数对
题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 一种直观的思路是通过暴力破解的方法,时间复杂度为O(N*N).除此以 ...
- 剑指offer 数组中的逆数对
链接:https://www.nowcoder.com/profile/8740530/codeBookDetail?submissionId=9156674 来源:牛客网class Solution ...
- 【剑指offer】数组中的逆序对
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/mmc_maodun/article/details/27520535 转载请注明出处:http:// ...
- 剑指offer:数组中的逆序对
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...
- 剑指offer03.数组中重复的数字
剑指offer03.数组中重复的数字 题目 第一种解法 第二种解法 第三种解法 值得一提的东西 题目 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的 ...
- 剑指offer之数组中的逆序对
1 问题 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...
- 【剑指offer】_12 数组中的逆序对
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...
最新文章
- Java归去来第2集:利用Eclipse创建Maven Web项目
- 主攻ASP.NET.4.5 MVC4.0之重生:Entity Framework生成实体类步骤(十三)
- cornerstone 忽略不必要文件
- qmoc文件_Qt中Q_OBJECT与生成的moc文件的作用
- struts2 简单登录校验示例
- Windows使用msi安装MySQL安装教程
- 学习手记(2020/8/19~2021/3/19)
- 【飞秋】手机游戏发展趋势分析和预测
- 线性表:6.双向链表,可构成双向循环链表和C语言实现
- 同林多域共用一台Exchange
- CocoaChina2013开发者大会演讲稿-主会场-陈昊芝
- jq 克隆 移除table
- 字母c语言ascii码,c语言ascii码对照表
- (17)DialogBox和DialogBoxParam函数
- diamond简介和使用
- MacOs使用IDEA自带的maven教程
- hdu2822(会双搜后再写次)
- 自下而上语法制导翻译过程
- CVPR读书笔记[7]:PCA的理解
- 台式计算机idc数据排名,2019年电脑销量排行_IDC:2019年中国PC市场预测销量持续走低...
热门文章
- paip.提升分词---准确度--常用量词表
- paip.银行卡号的发卡行归属地查询
- 华鑫证券王习平:让投资变成一件容易事、有趣事
- 如何对国内股票的名称进行脱敏(待续)
- 中讯环亚开始招大客户销售啦
- 联通、华为双双辟谣:云计算不要太火
- linux如何实现c语言程序,在Linux下如何利用C语言来实现一个Sniffer
- 【三维路径规划】基于matlab粒子群算法无人机三维路径规划【含Matlab源码 1260期】
- 【优化预测】基于matlab贝叶斯网络优化LSTM预测【含Matlab源码 1158期】
- 【物理应用】基于matlab Q学习无线体域网路由方法【含Matlab源码 264期】