容易想到的暴力解法:把数据都取出来排序,需要n2大小的数组存储 既然数组是有序的,把每一行看成一个有序数组,对这些数组进行归并排序,归并到第k个数为止。 看了题解,了解到优先级队列PriorityQueue可以用于实现归并排序,PriorityQueue底层是一个堆的结构。具体可参考这篇文章 刷算法 ...
分类:
编程语言 时间:
2020-07-02 13:42:16
阅读次数:
51
题目描述: 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。 请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。 今日学习: 1.复习reduce 2.归并排序 题解: 1.直接合成一个数组然后sort 2.二分查找 3.归并排序 //令人羞耻的 ...
分类:
其他好文 时间:
2020-07-02 13:36:03
阅读次数:
47
快排的划分,归并排序的归并,之后的kmp都是双指针算法。 双指针算法的两大类: 指向两个区间或指向一个区间 双指针算法一般是这样的 双指针算法运用了某些单调性质,可以将暴力的O(n^2)优化到O(n) 先来一个小的问题热身,输入一行若干个用空格隔开的单词,然后依次每行输出一个单词。具体应用看这里ht ...
分类:
其他好文 时间:
2020-06-30 10:56:43
阅读次数:
44
1、归并排序 基本思路:借助额外空间,合并两个有序数组,得到更长的有序数组。例如:「力扣」第 88 题:合并两个有序数组。 算法思想:分而治之(分治思想)。「分而治之」思想的形象理解是「曹冲称象」、MapReduce,在一定情况下可以并行化。 public class Solution { // 归 ...
分类:
编程语言 时间:
2020-06-28 18:15:49
阅读次数:
60
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。 ...
分类:
编程语言 时间:
2020-06-28 00:09:58
阅读次数:
71
基本思想:分治。 归并排序是以数组的中间点来分。 时间复杂度确定是nlogn 1:确定分界点mid = (l + r) / 2,是下标的中间值。 2:递归排序左右两边。排完序后,左右两边都是有序的了。 3:归并。把两个有序的数组,归并成一个有序的数组。 1 #include <bits/stdc++ ...
分类:
编程语言 时间:
2020-06-27 14:43:03
阅读次数:
68
内部排序 -插入排序 -直接插入排序 -折半插入排序 -希尔排序 -交换排序 -冒泡排序 -快速排序 -选择排序 -简单选择排序 -堆排序 -归并排序 -基数排序 外部排序 -多路归并排序 1.直接插入排序 算法思路:每次将一个待排序的记录按其关键字大小插入到前面已排好序的子序列中,指导全部记录插入 ...
分类:
编程语言 时间:
2020-06-24 16:30:37
阅读次数:
52
归并排序 给定长度为n的序列,归并排序并输出序列 我们把归并排序这样的大问题拆成两个小问题: 即将大数组分割成两个小数组,对这两个小数组分别进行归并排序并合并这两个小数组来得到一个排好序的大数组。 简单来说就两步:拆分,合并。 拆分是将原数组拆分成几个小段 合并是将这几个小段再合起来 #includ ...
分类:
编程语言 时间:
2020-06-23 17:32:23
阅读次数:
51
""" 归并排序 """ from math import floor merge_list = [11, 6743, 4656, 2321, 12, 54, 876, 232] # 合并两个数据,产生一个已经排序好的新的数组 def merge(left, right): # 设定临时数组 res ...
分类:
编程语言 时间:
2020-06-22 19:18:00
阅读次数:
61