- 博客(17)
- 收藏
- 关注
原创 聊一聊滑动窗口最大值
前言开篇明义,这题我做了6个小时每过一会,我就愤恨地看看它的**简单标识**。所以当最后肝出来的时候,就有了和大家细致地聊聊这道题的念头(这该死的虚荣心)。但回过头来看,这道题被标榜为简单,还是实至名归的,至少从大体的思路上来说是这样。而困扰我6个小时的其实是各种边界条件和逻辑分支,这也是我在接下来的篇幅中会着重谈到的地方。好啦,滑动窗口的故事就此拉开序幕了——一. 问题描述二. 思路及复杂度分析首先分析题意,找到滑动窗口中的最大值,既然是找最值的问题,那暴力遍历就可以解决了。而要找到滑动窗口的
2021-03-02 17:11:55
200
原创 第二单元笔记——应用层万字长文
摘要到第二章我们就将进入具体5层协议栈的描述,更具体地说,是从顶层应用层开始,渐进地学习计算机网络。我们知道,应用层是在传输层提供的服务上实现应用进程通信的,也就是借助操作系统使用Socket API的方式实现的。那基于Socket API应用层都实现了服务呢?常用的有Web,Http,FTP,Email,DNS,CDN。在讲述这些具体应用之前,我们会先对通用的原理作以介绍。然后展开描述这些应用层的服务。好啦,了解了概况,就让我们出发吧。。。前言在开始正式的内容之前,我们有必要先建立有意识的学习习
2021-02-22 10:02:20
541
原创 有效的括号——哈希表+栈解法
前言已经写了几篇关于栈算法的博文,我自己都不由得有点困惑栈这个知识点的纹路是什么,应该如何理解,什么样的问题适用于用栈来求解。在查了资料后,在这里与大家浅谈下这些令人困惑,但解释得很明晰的知识点——如何理解栈在数据结构与算法中,栈是一种满足后进先出特点的数据存放方式,可以认为这里的栈是一种逻辑结构,这种存放方式也配套了压栈,出栈,判空的方法。我们通常说的,方法的栈帧即是代码的运行方式,当程序运行后,调用一个方法就会为这个方法申请一个栈帧,方法返回后释放这个栈帧即可。存放数据的内存区域
2021-02-17 17:15:01
202
原创 用队列实现栈——beast 97%
前言在正式的算法解析之前,我们先补充一些前置知识:如何从底层理解栈与队列?所有的数据结构都可以由数组和链表实现,在这数据结构这个大家族中,数组和链表是结构基础,其他的数据结构则是基于数组和链表的上层建筑。比如说「队列」、「栈」这两种数据结构既可以使用链表也可以使用数组实现。用数组实现,就要处理扩容缩容的问题;用链表实现,没有这个问题,但需要更多的内存空间存储节点指针。那队列和栈有什么渊源呢?我们都知道栈是先进后出的数据结构,队列是先进先出的数据结构,那我们只要改变队列的因果,也就是将先入队列的.
2021-02-17 14:49:33
96
原创 最小栈——辅助栈与一个栈的解法
前言在开始栈小节的算法之前,我们先来了解一下java中是如何实现数据结构栈的。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HDlvZF37-1613541314191)(C:\Users\zyz\AppData\Roaming\Typora\typora-user-images\image-20210217083316134.png)]Stack继承自线程安全的数组Vector,既然是继承关系,那Stack也会拥有Vector声明为public的方法和变量。即Sta.
2021-02-17 13:56:33
411
原创 用栈实现基本计算器
文章目录基本计算器1.1 问题描述1.2 思路及复杂度分析逆波兰表达式求值思路及复杂度分析栈求解数组模拟栈求解趣味图解代码演示1.3 代码演示基本计算器1.1 问题描述实现一个基本的计算器来计算一个简单的字符串表达式 s 的值。示例 1: 输入:s = “1 + 1” 输出:2示例 2: 输入:s = " 2-1 + 2 " 输出:31.2 思路及复杂度分析因为睡眠不好的原因,总觉得头胀胀的,精神状态不好,但每日算法的断更又是我所不能接受的。所以这一篇我就用了力扣官方的题
2021-02-17 00:18:54
666
原创 数据结构与算法专栏笔记_排序算法篇
摘要算法如果按照模块分,排序是最重要的模块之一。它在实际场景中最常用,而且根据不同的场景可选择排序算法的空间大。当然,如果只是这样说理论,难免太晦涩。我们来看下面的小例子——javaJDK集合中的sort()方法即是使用归并排序的方式,时间复杂度为O(nlogn).HashMap中引入的桶。那究竟在什么场景使用什么排序方式呢?有没有什么衡量依据呢?人们更常用的是哪种呢?且听我娓娓道来——注:文章中的图均来自于极客时间数据结构与算法专栏。文章初衷是作为笔记使用,所以缺乏详细推导,仅用于回顾知识
2021-02-14 19:14:29
857
1
原创 # 数据结构与算法之美专栏笔记——递归篇
从一个问题开始假设A的推荐人是B,B的推荐人是C,如何来查找A的最终推荐人呢?这里直接给出答案——long findRootRerfererId(long actorId){ Long refererId = select referer_id from [table] where actor_id = actorId; if(refererId == null) return actorId; return findRootRerfererId(referer
2021-02-13 08:52:18
128
原创 栈与队列的基础实现
一. 实现一个数组栈public class ArrayStack { //数组 private int[] items; //栈中的元素个数 private int count; //栈的大小 private int n; /** * 使用构造方法初始化一个栈 */ public ArrayStack (int n){ this.items = new int[n]; this.n.
2021-02-09 22:53:59
73
原创 栈与队列的基础实现
一. 实现一个数组栈public class ArrayStack { //数组 private int[] items; //栈中的元素个数 private int count; //栈的大小 private int n; /** * 使用构造方法初始化一个栈 */ public ArrayStack (int n){ this.items = new int[n]; this.n.
2021-02-09 13:42:21
54
原创 面试常考的链表算法集锦
一.单链表的反转1.1 问题描述反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?1.2 思路及复杂度分析反转单链表,直观的理解,就是将每个节点的指针指向它的上一个节点。显然,这是一个循环操作。而循环操作中除了原生的循环之外,还包括迭代和递归两种特殊场景下的循环。很多人搞不清楚迭代与递归有怎样的爱恨.
2021-02-05 00:03:56
645
原创 第一章.计算机网络概述——最全的网络用语
本系列的内容会保持更新,朋友们敬请期待咯文章目录概要1.1 什么是Internet从组成角度从服务角度1.2 网络边缘1.3 网络核心电路交换分组交换网络核心的关键功能分组交换VS电路交换1.4 Internet结构与ISP1.5 分组延时,丢失和吞吐量分组延时分组丢失吞吐量1.6 协议层次与服务模型概要终于要进入正题了。但当看到第一章居然是概述,小伙伴们可能会困惑,概述的内容值得这么大的篇章吗?起初我也抱着这样的心里,所以仓促的看了下第一章,就去看后面的重点内容了。但往后学,慢慢发现所有的框.
2021-02-04 14:14:56
766
原创 计网那些事儿
写在前面的碎碎念其实细究起来,我在大二就上过计算机网络的课程,但无奈当时没有太多主动学习的意识,加之老师一言难尽的讲课水准,最终也就只学了个表皮。这个寒假有准备面试的想法,就在网上找了本HTTP协议的PDF书籍,感慨自己好菜的同时不忘画个圈圈纪念一下当初老师念PPT的深厚功力。当然,玩归玩,闹归闹。计网还是很重要的。要想在coder的路上走远点,编程的内功必须要扎实,而所谓内功无外乎操作系统,计算机网络,数据库系统。当然,计网对于我一个javaer的重要之处,侧重于有一个网络的框架,着重学习下TCP/.
2021-02-03 00:11:42
135
原创 面试常考的数组算法集锦
1.两数之和1.1 题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。你可以按任意顺序返回答案。1.2 思路及复杂度分析首先大家直观的想法,会考虑使用两层循环分别遍历数组,并将其相加的和与目标值相比较。这样的解法其平均时间复杂度为O(N2),着实不怎么优雅。那优化的空间在哪呢?既然通过第一层已经确定了一个值,那满足要求的值就呼之.
2021-02-02 21:24:22
376
原创 数据结构与算法之美专栏笔记_数组链表栈篇
提要在具体的算法题解之前,我们先简要的描述一些知识点,这些知识点都是基于数据结构与算法专栏内容的总结,其中也涉及一些评论区的见解,我仅做整理。对于详细的推理不再涉及,仅当做笔记使用。从一个问题开始为什么大部分编程语言中,数组要从0开始编号,而不是从1开始?从数组存储的内存模型来看,数组的下标实际上指的是内存地址的偏移,假设用a表示数组的首地址,将数组元素的类型所占字节数计为type_size,那么a[k]表示的含义就是存储在内存空间k*typesize+base_addr处的元素,如果从1开始编号.
2021-02-02 18:55:50
1145
原创 贯穿算法始终的复杂度分析
贯穿算法始终的复杂度分析前言对于数据结构与算法,我们首先给出一个宽泛的定义:从广义上来说,数据结构是一组数据的存储结构,算法是操作数据的一组方法。从狭义上来说,数据结构与算法是那些为人所知的解决方案,比如队列,堆,栈,二分查找,动态规划等。那么数据结构与算法之间又是怎样的藕断丝连呢?一言以蔽之,数据结构是为算法服务的,算法要作用在特定的数据结构之上,也就是它们之间是相互依存的,不能孤立算法去谈数据结构。复杂度分析数据结构和算法本身解决的是快和省的问题,也就是说时间和空间上的执行效率是衡量算
2021-02-02 17:12:53
93
原创 那些风雨里消逝的花
那些风雨里消逝的花予你的一诉衷肠在这个专栏正式的内容开启之前,先和朋友们唠嗑唠嗑一些有用的废话,觉得有兴致的,不妨听我娓娓道来。想直奔主题的,且看下集呈现~为什么要学习数据结构与算法?我想很多初涉编程的小白一直很困惑这个问题。其实在初涉编程的时候,我同样很疑惑,我是学习java后台开发的,出于物联网专业需要也接触过C语言,Pathon。仅仅从使用语言开发来说,很少有需要直接手撸算法的需要,这种困惑也伴随着我持续的CRUD之路…从大二下开始,陆续学习了数据结构与算法,操作系统,计算机网络,数据挖掘等
2021-02-02 15:03:48
198
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人