Loading

摘要: 计数排序 计数排序适用于最大值和最小值产别不大的数组,如果说最小为0,最大为1亿,那么就需要创建容量为1亿个元素的数组,时间复杂度就很高了 把数组元素作为临时数组的下标,统计每个下表出现的次数,最后再从索引为0开始依次顺序遍历该临时数组,次数为n就输出n次,就排序好了 为什么要max - min + 阅读全文
posted @ 2020-10-10 00:23 linzeliang 阅读(88) 评论(0) 推荐(1)
摘要: 堆排序 堆分为大顶堆和小顶堆,大顶堆就是父节点的值大于子节点的值(小顶堆反之)。大顶堆是升序,小顶堆是降序。 堆排序就是先构建一个顶堆,然后将堆顶第一个元素与最后一个元素交换,此时最大元素就跑到末尾去了,然后再整理一下堆进行下一次交换,直到剩下一个元素堆排序就完成了 不稳定排序、空间复杂度是O(1) 阅读全文
posted @ 2020-10-09 00:13 linzeliang 阅读(117) 评论(0) 推荐(0)
摘要: 希尔排序 希尔排序就是插入排序的升级版,普通的插入排序只是用于小规模数组或者比较有序的数组 希尔排序交换不相邻的元素以对数组的局部进行排序,根本思想还是插入排序 希尔排序是让间隔step的元素有序,刚开始是h = len / 2,然后 h = h / 2 / 2,一直这样缩小下去,直到为1,此时数组 阅读全文
posted @ 2020-10-08 00:14 linzeliang 阅读(130) 评论(0) 推荐(1)
摘要: 归并排序的两种方法 递归(自顶向下) 将一个大的无序的数组分成两个,然后拿出其中一个再分为两个···一直这样下取,直到最后剩下一个,那么这只包含一个元素的数组就是有序的了,然后将两个这样的数组通过merge方法有序的合并,一级一级,直到最开始的两个合并了就排序完了 先实现一个merge用来将两个有序 阅读全文
posted @ 2020-10-07 23:54 linzeliang 阅读(1280) 评论(0) 推荐(0)
摘要: 第一种(左右指针法) 我们取中间值作为基准值,又两个索引分别从左端和右端向中间靠拢,比较大小,将小于基准值的归到左边,大于基准值的归到右边,这时l与r可能都指向基准值的位置,但是下一步两个索引自增,l大于r(但是要保证不超出边界即left与right),这是l作为右半部分的新的递归的left,rig 阅读全文
posted @ 2020-10-07 12:03 linzeliang 阅读(550) 评论(0) 推荐(0)
摘要: 冒泡排序 时间复杂度O(n2)、空间复杂度O(1)、稳定、原地排序 冒泡排序就是比较与自己相邻的下一个数,如果下一个数比这个大,就交换,否则就进行下一个比较了,经过一轮,大的就会排到最后面去了,循环a.length - 1次即可,注意的是,每次比较只需要比较到倒数第二个,因为最后一个没有下一个与它进 阅读全文
posted @ 2020-10-07 00:17 linzeliang 阅读(171) 评论(0) 推荐(2)
摘要: 题目 多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。 给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。 示例 1: 输入:head 阅读全文
posted @ 2020-10-03 15:45 linzeliang 阅读(140) 评论(0) 推荐(0)
摘要: 题目 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 思路1 链表可以创建一个头结点来辅助解题,再创建一个指针指向头结点(该指针是把链表连起来用的), 阅读全文
posted @ 2020-10-03 10:13 linzeliang 阅读(154) 评论(0) 推荐(0)
摘要: 题目 给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。 如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。 示例: 输入:(7 -> 2 阅读全文
posted @ 2020-10-03 01:52 linzeliang 阅读(130) 评论(0) 推荐(0)
摘要: 题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 思路1 循环实现,创建一个头结点,再创建一个排序指针指向头结点。指向较小的结点,再比较后两个结点的大小,把指 阅读全文
posted @ 2020-10-03 00:21 linzeliang 阅读(108) 评论(0) 推荐(0)