
数据结构 排序
文章平均质量分 66
温酒知莲华
这个作者很懒,什么都没留下…
展开
-
[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 · 421 阅读 · 0 评论 -
[LintCode]400.最大间距
给定一个未经排序的数组,请找出其排序表中连续两个要素的最大间距。如果数组中的要素少于 2 个,请返回 0。 注意事项可以假定数组中的所有要素都是非负整数,且最大不超过 32 位整数。样例给定数组 [1, 9, 2, 5],其排序表为 [1, 2, 5, 9],其最大的间距是在 5 和 9 之间,= 4.挑战 用排序的方原创 2017-08-29 19:35:16 · 782 阅读 · 0 评论 -
最短子数组
对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度。给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度。(原序列位置从0开始标号,若原序列有序,返回0)。保证A中元素均为正整数。测试样例:[1,4,6,5,9,10],6返回:2class Subsequence {public: int shortes原创 2017-08-29 17:54:20 · 264 阅读 · 0 评论 -
[LintCode]28.搜索二维矩阵
写出一个高效的算法来搜索 m × n矩阵中的值。这个矩阵具有以下特性:每行中的整数从左到右是排序的。 每行的第一个数大于上一行的最后一个整数。样例考虑下列矩阵:[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]给出原创 2017-08-29 17:37:22 · 1510 阅读 · 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 · 414 阅读 · 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 · 289 阅读 · 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 · 590 阅读 · 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 · 395 阅读 · 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 · 525 阅读 · 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 · 817 阅读 · 0 评论