题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 传送门 归并排序的思想//去掉result就是纯归并 class Solution { ...
分类:
编程语言 时间:
2020-02-03 22:21:21
阅读次数:
92
快速排序 算法步骤: 在数列之中,选择一个元素作为”基准”(pivot),或者叫比较值。 数列中所有元素都和这个基准值进行比较,如果比基准值小就移到基准值的左边,如果比基准值大就移到基准值的右边 以基准值左右两边的子列作为新数列,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。 算法分析: ...
分类:
Web程序 时间:
2020-02-03 16:07:17
阅读次数:
102
题目 在?O(n?log?n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 示例 1: 输入: 4 2 1 3 输出: 1 2 3 4 示例 2: 输入: 1 5 3 4 0 输出: 1 0 3 4 5 来源:力扣(LeetCode) 链接:https://leetcode cn.com/pr ...
分类:
编程语言 时间:
2020-02-02 23:45:38
阅读次数:
106
微信公众号:bigsai 前言 在排序中,我们可能大部分更熟悉冒泡排序、快排之类。对归并排序可能比较陌生。然而事实上归并排序也是一种稳定的排序,时间复杂度为O(nlogn). 归并排序是基于分治进行归并的,有二路归并和多路归并.我们这里只讲二路归并并且日常用的基本是二路归并。并且归并排序的实现方式有 ...
分类:
编程语言 时间:
2020-02-02 19:48:33
阅读次数:
100
1. 本人做法,采用了取巧的方法,利用了java的comparartor与自带的sort函数,先拆链表再构建链表,java还是好用啊 2. 递归做法 学! 3. 迭代法(归并排序中的merge过程,逐个比较)这里最好创建一个新的链表,如果在原有的链表(l1或者l2上面操作的话会很麻烦) ...
分类:
其他好文 时间:
2020-02-02 15:45:33
阅读次数:
61
归纳 1.时间复杂度为o(n^2) 冒泡排序 选择排序 插入排序 希尔排序 2.时间复杂度为o(nlogn) 快速排序 归并排序 堆排序 3.时间复杂度为线性排序 计数排序 桶排序 基数排序 ...
分类:
编程语言 时间:
2020-02-02 11:33:32
阅读次数:
66
5. 归并排序 ? 两个有序数组合并并不难, 但是归并的思想确实是这个, 但是如何分, 分到何时呢 ? 这个名字含义就是分为 两个阶段执行 先说并吧, 并要求是两个已经排序好了的数组(两个连续数组是位置上也连续) , 比如 , 连续数组 和`3,4 1,2 4`进行排序 , 对于两个已经排序好了的数 ...
分类:
编程语言 时间:
2020-02-02 01:37:57
阅读次数:
99
面试题51:数组中的逆序对 题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 问题分析 大多数人的第一反应就是顺序扫描整个数组,对每个数字都和后面的数字比较大小,时间复杂度为O(n^2),效率太低。 利用归并排序的 ...
分类:
编程语言 时间:
2020-01-31 20:53:19
阅读次数:
402
归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 分治法: 分割:递归地把当前序列平均分割成两半。 集成:在保持元素顺序的同时将上一步得到的子序列集成到一起(归并)。 ...
分类:
编程语言 时间:
2020-01-31 14:00:22
阅读次数:
75
1 题目 "LeetCode第21题" ,合并两个有序链表. 2 直接合并 因为已经有序了,类似归并排序中的合并一样,操作不难,直接上代码了. 3 递归合并 这个可以采用递归优化,而且不用额外设置一个移动的临时结点t.首先对两个指针进行判空操作,其中一个为空的话返回另一个,然后进行递归合并,首先创建 ...
分类:
其他好文 时间:
2020-01-30 00:04:22
阅读次数:
92