1. 题目

逆序对问题:在一个数组中,左边的数如果比右边大,则这两个数构成一个逆序对,请打印所有逆序对

比如说:
数组: 5, 1, 3,4,2

第一个元素是5,其右边有小于5的数,即1,3,4,2,所以其逆序对是5,1; 5,3; 5,4; 5,2共计四对
第二个元素是1,其右边没有比该元素小的数,所以没有逆序对
第三个元素是3,其右边的2是小于该元素的数,所以其逆序对是3,2
第四个元素是4,其右边的2是小于该元素的数,所以其逆序对是4,2
第五个元素是2,其右边没有元素,没有逆序数

2. 思路

这个和前面一片文章是同一思路,点击此处,都是通过归并算法来考虑,不同的是,此处我们需要按从大到小来排序,只要左边数组某元素大于右边数组某元素,那么一定大于包括右边该元素以内所有的数

3. 程序

class Program{static void Main(string[] args){int[] t1 = { 5, 1, 3,4,2};InversionPair.StartRecursion(t1, 0, t1.Length - 1);Console.Read();}}class Problem2{//逆序对问题:在一个数组中,左边的数如果比右边大,则这两个数构成一个逆序对,请打印所有逆序对}public class InversionPair{public static void StartRecursion(int[] arr,int L,int R){if (L==R){return;}int M = L + ((R - L) >> 1);//中点位置StartRecursion(arr, L, M);StartRecursion(arr, M + 1, R);MergeRecursion(arr, L, R, M);}public static void MergeRecursion(int[] arr,int L,int R,int M){//从大到小排序int[] replace = new int[R - L + 1];int i = 0;int p1 = L;int p2 = M + 1;while (p1<=M&&p2<=R){//打印逆序对if (arr[p1] > arr[p2] ){var t1 = arr[p1];//大于右边数组某个数,那么arr[p1]肯定也大于右边数组里的该数以后的数,均为逆序对for (int z = 0; z < R-p2+1; z++){var t2 = arr[p2+z];Console.WriteLine($"逆序对:{t1},{t2}");}}replace[i++] = arr[p1] > arr[p2] ? arr[p1++] : arr[p2++];}while (p1<=M){replace[i++] = arr[p1++];}while (p2 <= R){replace[i++] = arr[p2++];}for (int j = 0; j < replace.Length; j++){arr[L + j] = replace[j];}}}

算法笔记-归并算法面试题、逆序数问题相关推荐

  1. 一周刷爆LeetCode,算法da神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记

    一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记 教程与代码地址 P1 出圈了!讲课之外我们来聊聊 ...

  2. prim算法_历时两月,终拿字节跳动offer,算法面试题分享「带答案」

    欢迎关注专栏<Java架构筑基>--专注于Java技术的研究与分享! Java架构筑基​zhuanlan.zhihu.com Java架构筑基--专注于Java技术的研究与分享! 后续文章 ...

  3. 66 道前端算法面试题附思路分析助你查漏补缺

    大家好,我是漫步. 今天来分享一篇干货,前端关于算法的分析不多,下文列举了66道前端算法面试题,希望对你有所帮助. 作者:Eno_Yao https://segmentfault.com/a/1190 ...

  4. 【2021最新版】数据结构+算法面试题总结(9+20道题含答案解析)

    文章目录 1.栈(stack) 2.队列(queue) 3.链表(Link) 4.散列表(Hash Table) 5.排序二叉树 6. 前缀树 7.红黑树 8.B-TREE 9.位图 算法面试题 1. ...

  5. 微软的100道算法面试题(终结版)

    前言 数据结构与算法的重要性已不言而喻,最近,我整理出十大经典排序算法.五大常用算法总结,今天特意整理出微软面试的100题,若有不足之处,欢迎指正!由于篇幅过长,前30道题目写在上一篇,大家可以进我的 ...

  6. 现实中的算法面试题(已拿Offer)赚到了,赚到了

    算法面试题 阅读目录 写在前面 算法百科 算法题目 参考答案 博客总结 博客前言 有提到分享一下面试题,最近也是才能新公司入职没多久,忙着熟悉环境,加上前不久出去玩了一趟(顺便写了篇游记,感兴趣的可以 ...

  7. 力扣高频|算法面试题汇总(七):树

    力扣高频|算法面试题汇总(一):开始之前 力扣高频|算法面试题汇总(二):字符串 力扣高频|算法面试题汇总(三):数组 力扣高频|算法面试题汇总(四):堆.栈与队列 力扣高频|算法面试题汇总(五):链 ...

  8. 数据结构经典算法面试题

    转自:http://hi.baidu.com/geogre_jsj/blog/item/e4b98fd2aab5aa3611df9b92.html 由于这些题,实在太火了.所以,应广大网友建议要求,在 ...

  9. 经典算法面试题及答案

    经典算法面试题及答案  1. 时针分针重合几次 表面上有60个小格,每小格代表一分钟, 时针每分钟走1/12小格,分针每分钟走1小格,从第一次重合到第二次重合分针比时针多走一圈即60小格,所以 60/ ...

最新文章

  1. android phonegap插件开发方法 plugin
  2. java gc的工作原理、如何优化GC的性能、如何和GC进行有效的交互
  3. eclipse 启动tomcat, java.lang.ClassNotFoundExcepti
  4. redis学习-02
  5. 闲鱼有微信小程序吗_微信小程序商品展示页面(仿咸鱼)
  6. jvm(6)-Class字节码文件结构总结
  7. 【重点突破】—— React实现富文本编辑器
  8. 如何知道linux的ssh秘钥是否匹配,SSH密钥验证
  9. 15款提高表格操作的jQuery插件
  10. 关于在不同版本和平台之间进行还原或复制的常见问题
  11. SystemCenter2012SP1实践(0)本系列摘要目录
  12. sourcetree提示无效路径_关于今明可转债申购的温馨提示
  13. hadoop 压缩工具 比较
  14. 你朋友圈里原来这些文章最火
  15. 【数据安全】4. Android 文件级加密(File-based Encryption)之密钥管理
  16. linux7分区硬盘,centos7根分区硬盘扩容
  17. android自定义Dcloud插件,调用android原生界面并获取返回数据
  18. 夜遇歹人来不及报警怎么办?让求救app帮助你
  19. vue2.0 使用可选链操作符
  20. tcping计算机端口,TCPing 服务器端口测试,端口阻断检测

热门文章

  1. matlab固定床反应器,合成气完全甲烷化固定床反应器数值模拟
  2. 图表+笔记-python语言-第5章:数字/5.11 位操作
  3. Win/Linux常用命令
  4. shell脚本--03免密疑云
  5. [CareerCup] 11.2 Sort Anagrams Array 异位词数组排序
  6. 爱立信与SK电讯等开展5G测试 将加强VR/AR及云服务连接速度
  7. 算法系列【希尔排序】篇
  8. 基于SSL的mysql(MariaDB)主从复制
  9. DataGridView发生异常
  10. 20条常见的编码陷阱