面试算法详解
针对面试和笔试所碰到的题目总结规律和解法
壹零叁玖
多多重复 百炼成钢
展开
-
面向对象设计Twitter
开篇大家不要太兴奋,这篇文章只是解决Leetcode上的335题design Twitter,并不是从前端、后端、数据库等各种繁琐的层次来设计Twitter,能力不够而且工程量确实很大,所以我们今天就简单说一下这道题目和类似Twitter这种社交平台的基本算法。设计Twitter首先我们先列举以下我们需要实现的几个API:class Twitter{ //user发表一套tweet动态 void postTweet(int userId,int tweetId){} //返原创 2020-06-12 21:17:18 · 342 阅读 · 0 评论 -
教你如何使用单调队列解题
开篇昨天我们介绍了单调栈的解题方法以及适合使用单调栈的几种解题情境。今天我们说的这种也是类似单调栈的另一种特殊数据结构——单调队列。废话不多说,我们直接开始。单调队列在教你如何使用单调栈中,我们就提到过单调队列这种数据结构。因为队列和栈都是我们熟悉的数据结构,二者非常类似,我们可以使用两个队列去实现一个栈,也可以使用两个栈去实现一个队列,因此单调栈和单调队列差不多。只不过还是最根本的入栈出栈以及入队出队的顺序问题,这个相信不用多提了。单调队列顾名思义,就是队列内部元素单调的队列?我们都已经有了单调栈原创 2020-06-10 17:58:47 · 220 阅读 · 0 评论 -
教你如何使用单调栈解题
开篇懒癌晚期最近疯狂发作,连着三四天没有更新博客,没有刷PAT,感觉到了最熟悉的期末搁置阶段(简称越到期末越放松)。今天终于提起精神来完成每日任务了,希望在离开家的前几天可以每天更新一篇面试类文章吧。今天我们仍然说数据结构(算法部分暂时搁置,因为本人最近也在充实算法领域的其他新鲜知识,等把最近的那本书看完再来继续更新纯算法博客).今天是一种非常重要的数据结构的衍生物——单调栈,至于什么是单调栈呢,接着往下看吧。单调栈众所周知,栈是我们在解题的时候用的非常多一个数据结构,你可能不知道什么Bellman原创 2020-06-09 20:49:04 · 324 阅读 · 0 评论 -
二叉堆详解实现优先级队列
开篇今天说一种在排序方面有很大作用的数据结构。我们都知道在排序方面最快的算法应该是快速排序,时间复杂度为O(nlogn),但这个算法不稳定,如果数组本身就有序的话会浪费很多时间。还有一种无论在空间和时间角度都很稳定且快速的排序方法——堆排序。堆排序利用的数据结构就是一个优先队列。所以这次我们就详述一下用二叉堆来实现一个优先队列。二叉堆概述首先我们说一下二叉堆和二叉树的关系。为什么总有人把二叉堆画出二叉树呢?因为二叉堆其实就是一种特殊的二叉树(完全二叉树),只不过存储在数组里。(所以我们的排序过程应该原创 2020-05-26 21:10:26 · 1697 阅读 · 2 评论 -
经典的数据结构应用之LRU算法
开篇接下来的文章我们会介绍有关各种数据结构应用的文章,毕竟数据结构与算法才是算法这个概念的完全体,二者搭配才能解决更多问题。比如今天要说的LRU算法。LRU算法是一种缓存淘汰策略。计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新内容腾位置。但问题是,我们应该删除哪些内容呢?我们肯定希望删掉那些没什么用处的缓存,而把有用的数据继续留在缓存中,方便之后继续使用。但是判断有用数据的标准是什么呢?LRU的全称是Least Recently Used,也就是说我们认为最近使用过的数据应该是有用的,很久原创 2020-05-20 22:44:21 · 1317 阅读 · 0 评论 -
团灭Leetcode打家劫舍问题
开篇动态规划的问题我们已经说过很多了,今天这篇博客将是最后一篇面试题详解中的动态规划算法问题,接下来我们会对其他算法进行一些类型题的更新——如回溯法,贪心法。以及一些数据结构的典型例题,如hash,链表,栈,二叉搜索树(这个是最重要的),堆(优先队列)等等进行基础问题的更新。(主要借鉴labuladong的文章及顺序)今天我们要说的以是一道leetcode上的一种类型题——打家劫舍。我在大二的时候,基本毫无算法基础,仅仅会python和C++编程,就受到了某些名人的怂恿,大胆地去面试了,现在想想当初自己原创 2020-05-19 22:58:49 · 2589 阅读 · 1 评论 -
详述KMP算法的另一种理解——动态规划法解决字符串匹配问题
开篇这篇文章拖了超级久,中间连续了更新了几篇零零散散的题目,但其实都是为了给这道题目打掩护,因为讲实话,我是真的不愿意写这篇文章,因为感觉内容太长了而且我容易说着说着就把自己绕进去。今天终于有时间了,为了给大家带来更好的体验,今天又重新看了一遍这个解题方法,防止说不清道不明,到最后耽误大家时间。吐槽KMP既然文章很长,那么我们就不急,先聊聊KMP吧。要聊KMP那可有的说了,这是我自学计算机的第一个最大的阴影。我现在大三,本科学的是一个完全和计算机不相关的专业——生物。大二的时候自学计算机,刚学了不久就原创 2020-05-15 02:30:25 · 725 阅读 · 0 评论 -
拼多多5.6面试题总结
开篇5.6那天参加了PDD的后端岗位笔试,明显感觉题不是很难,但是做起来力不从心,所以AC率感人。在这里就不丢人现眼了,一共有四道题,我都截了图,最近重新做了两道,在这里分享一下。说明:这两道题都是leetcode的原题,大家也可以参加leetcode中的945和473,下面说一下我的思路。题目一.使数组唯一的增量最小我们的目的是通过对一些元素进行递增,使得数组中没有重复元素,题目很容易理解,这道题我们将要说三种做法。1.数组排序贪心法我们首先将数组进行排序,并设置一个先前元素值,这个先前元素原创 2020-05-13 22:48:39 · 568 阅读 · 0 评论 -
动态规划经典算法之最长回文子序列问题
开篇好吧我承认我又懒了,KMP算法是一个比较复杂的算法,如果用动态规划来解决更不是一句两句话说得清楚的,所以周四没课那天更新KMP算法动态规划解决的文章。今天聊点不复杂且和前文有直接关系的——动态规划之子序列问题解题模板我们知道,子序列问题比子串问题要难,因为子串问题是连续的,而子序列问题是不连续的,我们用暴力法都不一定可以解决。一般题目不会让我求最短子序列,因为最短子序列肯定是一个字符啊,没有比它更短的了。所以一般都是最长子序列问题。那最长子序列问题暴力法无法解决,而且还有最值要求,我们很自然地想到了原创 2020-05-11 00:14:23 · 1210 阅读 · 0 评论 -
动态规划经典算法之博弈问题
开篇最近有点懒,这种长文好久没更新了。今天聊一个比较有趣的智力问题——博弈问题。我们一定遇到过这种问题,两个地主分宝石或者是两个人抢硬币,问你怎么做能赢得更多的奖励巴拉巴拉巴拉。这种问题其实归根到底,都是博弈问题。只不过是换了种形式。下次再有人问你类似的问题时,你就可以告诉他:“我懒得思考这么简单的问题,我给你个算法好了”。是不是很牛逼。话不多说,我们开始吧。问题描述两个人面前有一排石头堆,有一个数组piles表示,piles[i]表示第i堆石子有多少个。你们轮流拿石头,一次拿一堆,但是只能拿走最左原创 2020-05-08 21:04:48 · 1206 阅读 · 0 评论 -
动态规划经典算法之最长公共子序列问题
开篇最长公共子序列问题又称为LCS问题,这个问题和动态规划的很多问题无论从思路还是框架上都非常相似,比如编辑距离问题(后续的文章中会讲到),所以掌握这个最经典的LCS问题是很有必要的。话不多说我们开始吧。题目描述题目就是让我们求两个字符串的最长公共序列,字符的相对顺序不能变,求出最长序列长度。输入:str1 = "abdefc",str2 = "aecf"输出:长度为3解释:最长公共子...原创 2020-05-01 19:13:27 · 3593 阅读 · 0 评论 -
动态规划之经典的股票买卖问题详解
开篇Leetcode上有一组让人头疼的问题——股票买卖问题。这个问题有各种改良版本,于是就延伸出了六种问题。我的不少题友也都和我抱怨过这个问题哪里哪里有坑,哪里哪里不好想到,自己研究了一下发现,这六个题其实就只有一个框架。而整体的框架还是我们上次所说到的找状态,穷举做选择。昨天有几个朋友看了我的文章之后问我能不能从数学层面解释算法,这里我要说一下,数学对算法固然重要,但是算法最主要的还是一个思...原创 2020-05-01 00:36:31 · 886 阅读 · 0 评论 -
动态规划之经典的鸡蛋坠楼问题详解
开篇经过了各种惨痛的公司笔试失利之后,慢慢掌握了公司出题的一些套路,其中动态规划是避免不了的。最近研究了一些公司笔试的一些出题思路和套路,加上自己看的一些大神的面经,打算写一些关于公司常见笔试类型题的系列文章。这一部分本身也是自己的薄弱项,所以打算写的细致一些,希望对大家有所帮助,也希望自己早点摆脱被虐的困境。声明:我列出的这些不是百分百会出的题,只是我个人遇到的比较多的问题,或者是我遇到的问...原创 2020-04-29 21:14:20 · 1241 阅读 · 0 评论