![](https://img-blog.csdnimg.cn/20210201184015867.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
文章平均质量分 82
慢慢播种
差天半子
日拱一卒,功不唐捐
展开
-
聊一聊滑动窗口最大值
前言开篇明义,这题我做了6个小时每过一会,我就愤恨地看看它的**简单标识**。所以当最后肝出来的时候,就有了和大家细致地聊聊这道题的念头(这该死的虚荣心)。但回过头来看,这道题被标榜为简单,还是实至名归的,至少从大体的思路上来说是这样。而困扰我6个小时的其实是各种边界条件和逻辑分支,这也是我在接下来的篇幅中会着重谈到的地方。好啦,滑动窗口的故事就此拉开序幕了——一. 问题描述二. 思路及复杂度分析首先分析题意,找到滑动窗口中的最大值,既然是找最值的问题,那暴力遍历就可以解决了。而要找到滑动窗口的原创 2021-03-02 17:11:55 · 179 阅读 · 0 评论 -
有效的括号——哈希表+栈解法
前言已经写了几篇关于栈算法的博文,我自己都不由得有点困惑栈这个知识点的纹路是什么,应该如何理解,什么样的问题适用于用栈来求解。在查了资料后,在这里与大家浅谈下这些令人困惑,但解释得很明晰的知识点——如何理解栈在数据结构与算法中,栈是一种满足后进先出特点的数据存放方式,可以认为这里的栈是一种逻辑结构,这种存放方式也配套了压栈,出栈,判空的方法。我们通常说的,方法的栈帧即是代码的运行方式,当程序运行后,调用一个方法就会为这个方法申请一个栈帧,方法返回后释放这个栈帧即可。存放数据的内存区域原创 2021-02-17 17:15:01 · 187 阅读 · 0 评论 -
用队列实现栈——beast 97%
前言在正式的算法解析之前,我们先补充一些前置知识:如何从底层理解栈与队列?所有的数据结构都可以由数组和链表实现,在这数据结构这个大家族中,数组和链表是结构基础,其他的数据结构则是基于数组和链表的上层建筑。比如说「队列」、「栈」这两种数据结构既可以使用链表也可以使用数组实现。用数组实现,就要处理扩容缩容的问题;用链表实现,没有这个问题,但需要更多的内存空间存储节点指针。那队列和栈有什么渊源呢?我们都知道栈是先进后出的数据结构,队列是先进先出的数据结构,那我们只要改变队列的因果,也就是将先入队列的.原创 2021-02-17 14:49:33 · 86 阅读 · 0 评论 -
最小栈——辅助栈与一个栈的解法
前言在开始栈小节的算法之前,我们先来了解一下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 · 382 阅读 · 0 评论 -
用栈实现基本计算器
文章目录基本计算器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 · 561 阅读 · 0 评论 -
数据结构与算法专栏笔记_排序算法篇
摘要算法如果按照模块分,排序是最重要的模块之一。它在实际场景中最常用,而且根据不同的场景可选择排序算法的空间大。当然,如果只是这样说理论,难免太晦涩。我们来看下面的小例子——javaJDK集合中的sort()方法即是使用归并排序的方式,时间复杂度为O(nlogn).HashMap中引入的桶。那究竟在什么场景使用什么排序方式呢?有没有什么衡量依据呢?人们更常用的是哪种呢?且听我娓娓道来——注:文章中的图均来自于极客时间数据结构与算法专栏。文章初衷是作为笔记使用,所以缺乏详细推导,仅用于回顾知识原创 2021-02-14 19:14:29 · 400 阅读 · 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 · 118 阅读 · 0 评论 -
栈与队列的基础实现
一. 实现一个数组栈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 · 68 阅读 · 0 评论 -
面试常考的链表算法集锦
一.单链表的反转1.1 问题描述反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?1.2 思路及复杂度分析反转单链表,直观的理解,就是将每个节点的指针指向它的上一个节点。显然,这是一个循环操作。而循环操作中除了原生的循环之外,还包括迭代和递归两种特殊场景下的循环。很多人搞不清楚迭代与递归有怎样的爱恨.原创 2021-02-05 00:03:56 · 282 阅读 · 0 评论 -
面试常考的数组算法集锦
1.两数之和1.1 题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。你可以按任意顺序返回答案。1.2 思路及复杂度分析首先大家直观的想法,会考虑使用两层循环分别遍历数组,并将其相加的和与目标值相比较。这样的解法其平均时间复杂度为O(N2),着实不怎么优雅。那优化的空间在哪呢?既然通过第一层已经确定了一个值,那满足要求的值就呼之.原创 2021-02-02 21:24:22 · 195 阅读 · 0 评论 -
数据结构与算法之美专栏笔记_数组链表栈篇
提要在具体的算法题解之前,我们先简要的描述一些知识点,这些知识点都是基于数据结构与算法专栏内容的总结,其中也涉及一些评论区的见解,我仅做整理。对于详细的推理不再涉及,仅当做笔记使用。从一个问题开始为什么大部分编程语言中,数组要从0开始编号,而不是从1开始?从数组存储的内存模型来看,数组的下标实际上指的是内存地址的偏移,假设用a表示数组的首地址,将数组元素的类型所占字节数计为type_size,那么a[k]表示的含义就是存储在内存空间k*typesize+base_addr处的元素,如果从1开始编号.原创 2021-02-02 18:55:50 · 739 阅读 · 0 评论 -
贯穿算法始终的复杂度分析
贯穿算法始终的复杂度分析前言对于数据结构与算法,我们首先给出一个宽泛的定义:从广义上来说,数据结构是一组数据的存储结构,算法是操作数据的一组方法。从狭义上来说,数据结构与算法是那些为人所知的解决方案,比如队列,堆,栈,二分查找,动态规划等。那么数据结构与算法之间又是怎样的藕断丝连呢?一言以蔽之,数据结构是为算法服务的,算法要作用在特定的数据结构之上,也就是它们之间是相互依存的,不能孤立算法去谈数据结构。复杂度分析数据结构和算法本身解决的是快和省的问题,也就是说时间和空间上的执行效率是衡量算原创 2021-02-02 17:12:53 · 81 阅读 · 0 评论 -
那些风雨里消逝的花
那些风雨里消逝的花予你的一诉衷肠在这个专栏正式的内容开启之前,先和朋友们唠嗑唠嗑一些有用的废话,觉得有兴致的,不妨听我娓娓道来。想直奔主题的,且看下集呈现~为什么要学习数据结构与算法?我想很多初涉编程的小白一直很困惑这个问题。其实在初涉编程的时候,我同样很疑惑,我是学习java后台开发的,出于物联网专业需要也接触过C语言,Pathon。仅仅从使用语言开发来说,很少有需要直接手撸算法的需要,这种困惑也伴随着我持续的CRUD之路…从大二下开始,陆续学习了数据结构与算法,操作系统,计算机网络,数据挖掘等原创 2021-02-02 15:03:48 · 162 阅读 · 1 评论