数据结构
文章平均质量分 70
丶chuchu丶
无限进步
展开
-
非基于比较的排序
基数排序、桶排序、计数排序原创 2022-02-20 21:54:05 · 268 阅读 · 6 评论 -
万字排序算法总结
排序算法、直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序原创 2022-02-20 21:16:47 · 283 阅读 · 4 评论 -
优先级队列的相关应用
一、topK问题 问题描述:从N个数中找到前K个大的数 比如{1,2,3,4,5}中前2个大的就是 4 和 5 这里介绍使用优先级队列的方法,思路是这样: 用数组中前K个元素先构建一个小根堆 然后遍历数组取值,如果这个值大于堆顶元素就弹出堆顶元素 再把这个值放入重新调整为一个小根堆 因为每次都把堆中最小的值弹出,所以最后留下的K个值一定是最大的。 照这个思路,我们不难得到: 求前K个最大,建小根堆 求前K个最小,建大根堆 求第K大,就是调整好的小根堆的堆顶元素(堆顶元素一定是这K个.原创 2022-02-12 23:00:55 · 538 阅读 · 2 评论 -
创建优先级队列
本篇将介绍优先级队列,并自己创建一个。 目录 概念 分类 创建优先级队列 基本方法 shiftDown()方法 shiftUp()方法 概念 首先注意:堆只是优先级队列的一种是实现方式而已 讲到优先级队列就要讲到二叉树 使用数组存储,并用层序遍历的方式放入数组中就是它的表现形式 一般为了保证没有空间浪费,存储的都是完全二叉树 分类 优先级队列还分为大根堆和小根堆 大根堆就是任意节点值都大于子树节点值,小根堆相反 因为它们的特点,所以优先级队列的作用就..原创 2022-02-11 19:19:26 · 1153 阅读 · 2 评论 -
力扣42、接雨水(单调栈思想)
力扣42、接雨水(单调栈)原创 2022-02-09 15:48:43 · 477 阅读 · 0 评论 -
力扣239、滑动窗口最大值(单调队列思想)
力扣刷题——滑动窗口的最大值原创 2022-02-08 23:04:30 · 304 阅读 · 0 评论 -
刷题日志——链表篇(下)
此题的一种思路是: 分别算出两个链表长度,然后让短的先走他们长度的插值 这样两个链表在同一起点,一起往后走 直到遇到相同节点就返回(如果没有相同的他们一起到null了) 代码: public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if (headA == null && headB == null){原创 2021-12-05 12:15:00 · 510 阅读 · 2 评论 -
刷题日志——链表篇(上)
这篇博客就是总结以下自己刷力扣链表简单题的错误点与想法。 1.合并两个有序链表 第一次的有错想法: class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode dummy = new ListNode(-1); ListNode tmp = dummy; while (l1 != null || l2 != null){ ..原创 2021-12-04 10:41:36 · 850 阅读 · 2 评论 -
时间复杂度与空间复杂度
一串代码的效率很重要,衡量一串代码的效率可以分为两个标准: 时间复杂度、空间复杂度 目录 ✍一、时间复杂度 ????二、计算时间复杂度练习 ????三、空间复杂度 ????四、计算时间复杂度练习 一、时间复杂度 因为每个机器配置不同,不可能去测试代码执行时间。 所以我们用算法中的基本操作的执行次数,为算法的时间复杂度。 让我们来看一串代码: // 请计算一下func1基本操作执行了多少次? void func1(int N){ //1. int count = 0;原创 2021-11-01 16:04:05 · 193 阅读 · 2 评论