![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构 排序
文章平均质量分 62
温酒知莲华
这个作者很懒,什么都没留下…
展开
-
[LintCode]532.逆序对
在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。给你一个数组,求出这个数组中逆序对的总数。 概括:如果a[i] > a[j] 且 i 样例 序列 [2, 4, 1, 3, 5] 中,有 3 个逆序对 (2, 1), (4, 1), (4, 3),则返回 3 。 思路:利用归并排序,可以求出逆序对 class Solution { p原创 2017-08-18 18:24:33 · 349 阅读 · 0 评论 -
[LintCode]400.最大间距
给定一个未经排序的数组,请找出其排序表中连续两个要素的最大间距。 如果数组中的要素少于 2 个,请返回 0。 注意事项 可以假定数组中的所有要素都是非负整数,且最大不超过 32 位整数。 样例 给定数组 [1, 9, 2, 5],其排序表为 [1, 2, 5, 9],其最大的间距是在 5 和 9 之间,= 4. 挑战 用排序的方原创 2017-08-29 19:35:16 · 736 阅读 · 0 评论 -
最短子数组
对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度。 给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度。(原序列位置从0开始标号,若原序列有序,返回0)。保证A中元素均为正整数。 测试样例: [1,4,6,5,9,10],6 返回:2 class Subsequence { public: int shortes原创 2017-08-29 17:54:20 · 228 阅读 · 0 评论 -
[LintCode]28.搜索二维矩阵
写出一个高效的算法来搜索 m × n矩阵中的值。 这个矩阵具有以下特性:每行中的整数从左到右是排序的。 每行的第一个数大于上一行的最后一个整数。 样例 考虑下列矩阵: [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] 给出原创 2017-08-29 17:37:22 · 1467 阅读 · 0 评论 -
三色排序
有一个只由0,1,2三种元素构成的整数数组,请使用交换、原地排序而不是使用计数进行排序。 给定一个只含0,1,2的整数数组A及它的大小,请返回排序后的数组。保证数组大小小于等于500。 测试样例: [0,1,1,0,2,2],6 返回:[0,0,1,1,2,2] 思路:与快排划分过程相似 class ThreeColor { public: vect原创 2017-08-29 17:23:16 · 367 阅读 · 0 评论 -
有序数组合并
有两个从小到大排序以后的数组A和B,其中A的末端有足够的缓冲空容纳B。请编写一个方法,将B合并入A并排序。 给定两个有序int数组A和B,A中的缓冲空用0填充,同时给定A和B的真实大小int n和int m,请返回合并后的数组。 class Merge { public: int* mergeAB(int* A, int* B, int n, int m) {原创 2017-08-29 17:03:02 · 258 阅读 · 0 评论 -
重复值判断
请设计一个高效算法,判断数组中是否有重复值。必须保证额外空间复杂度为O(1)。 给定一个int数组A及它的大小n,请返回它是否有重复值。 测试样例: [1,2,3,4,5,5,6],7 返回:true 思路:先排序,再判断。空间复杂度限制为O(1),使用非递归版本的堆排序。 空间复杂度: O(1):冒泡排序,插入排序,希尔排序,选择排序,堆排序原创 2017-08-29 16:53:42 · 510 阅读 · 0 评论 -
小范围排序
择一个合适的排序算法针对这个数据进行排序。 给定一个int数组A,同时给定A的大小n和题意中的k,请返回排序后的数组。 测试样例: [2,1,4,3,6,5,8,7,10,9],10,2 返回:[1,2,3,4,5,6,7,8,9,10] 思路:小根堆 class ScaleSort { public: vector sortElement(原创 2017-08-29 16:16:51 · 359 阅读 · 0 评论 -
[LintCode]5.第k大元素
在数组中找到第k大的元素 注意事项 你可以交换数组中的元素的位置 样例 给出数组 [9,3,2,4,8],第三大的元素是 4 给出数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4,第三大的元素是 3,以此类推 思路:基于快速排序,找到一个轴点,左边的比他大,右边的比他小 class Solution { public:原创 2017-08-19 18:26:48 · 472 阅读 · 0 评论 -
排序算法实现总结
冒泡排序:时间复杂度是O(n2) int* bubbleSort(int* A, int n) { for (int i = n - 1; i >= 0; i--) { for (int j = 0; j < i; j++) { if (A[j] > A[j + 1]){ int temp =原创 2017-08-27 15:03:05 · 748 阅读 · 0 评论