2019独角兽企业重金招聘Python工程师标准>>>

题目描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。输入:

每个测试案例包括两行:
第一行包含一个整数n,表示数组中的元素个数。其中1 <= n <= 10^5。
第二行包含n个整数,每个数组均为int类型。

输出:对应每个测试案例,输出一个整数,表示数组中的逆序对的总数。 样例输入:

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】数组中的逆序对相关推荐

  1. 剑指Offer_35_数组中的逆序对

    题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...

  2. 剑指offer 数组中的逆序对

    题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...

  3. 2021-09-03剑指Offer51.数组中的逆序对

    class Solution {int[] nums, tmp;//表示未分配长度的数组指针?//java的默认权限是共有还是私有?public int reversePairs(int[] nums ...

  4. 剑指offer35——数组中的逆数对

    题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 一种直观的思路是通过暴力破解的方法,时间复杂度为O(N*N).除此以 ...

  5. 剑指offer 数组中的逆数对

    链接:https://www.nowcoder.com/profile/8740530/codeBookDetail?submissionId=9156674 来源:牛客网class Solution ...

  6. 【剑指offer】数组中的逆序对

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/mmc_maodun/article/details/27520535 转载请注明出处:http:// ...

  7. 剑指offer:数组中的逆序对

    题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...

  8. 剑指offer03.数组中重复的数字

    剑指offer03.数组中重复的数字 题目 第一种解法 第二种解法 第三种解法 值得一提的东西 题目 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的 ...

  9. 剑指offer之数组中的逆序对

    1 问题 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...

  10. 【剑指offer】_12 数组中的逆序对

    题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...

最新文章

  1. Java归去来第2集:利用Eclipse创建Maven Web项目
  2. 主攻ASP.NET.4.5 MVC4.0之重生:Entity Framework生成实体类步骤(十三)
  3. cornerstone 忽略不必要文件
  4. qmoc文件_Qt中Q_OBJECT与生成的moc文件的作用
  5. struts2 简单登录校验示例
  6. Windows使用msi安装MySQL安装教程
  7. 学习手记(2020/8/19~2021/3/19)
  8. 【飞秋】手机游戏发展趋势分析和预测
  9. 线性表:6.双向链表,可构成双向循环链表和C语言实现
  10. 同林多域共用一台Exchange
  11. CocoaChina2013开发者大会演讲稿-主会场-陈昊芝
  12. jq 克隆 移除table
  13. 字母c语言ascii码,c语言ascii码对照表
  14. (17)DialogBox和DialogBoxParam函数
  15. diamond简介和使用
  16. MacOs使用IDEA自带的maven教程
  17. hdu2822(会双搜后再写次)
  18. 自下而上语法制导翻译过程
  19. CVPR读书笔记[7]:PCA的理解
  20. 台式计算机idc数据排名,2019年电脑销量排行_IDC:2019年中国PC市场预测销量持续走低...

热门文章

  1. paip.提升分词---准确度--常用量词表
  2. paip.银行卡号的发卡行归属地查询
  3. 华鑫证券王习平:让投资变成一件容易事、有趣事
  4. 如何对国内股票的名称进行脱敏(待续)
  5. 中讯环亚开始招大客户销售啦
  6. 联通、华为双双辟谣:云计算不要太火
  7. linux如何实现c语言程序,在Linux下如何利用C语言来实现一个Sniffer
  8. 【三维路径规划】基于matlab粒子群算法无人机三维路径规划【含Matlab源码 1260期】
  9. 【优化预测】基于matlab贝叶斯网络优化LSTM预测【含Matlab源码 1158期】
  10. 【物理应用】基于matlab Q学习无线体域网路由方法【含Matlab源码 264期】