摘要: 之前也有文章写过几个有趣的智力题,今天再聊一道巧妙的题目。 题目非常简单: 给一个长度为 n 的数组,其索引应该在 ,但是现在你要装进去 n + 1 个元素 ,那么肯定有一个元素装不下嘛,请你找出这个缺失的元素。 这道题不难的,我们应该很容易想到,把这个数组排个序,然后遍历一遍,不就很容易找到缺失的 阅读全文
posted @ 2020-02-17 11:16 labuladong 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 烧饼排序是个很有意思的实际问题:假设盘子上有 块 面积大小不一 的烧饼,你如何用一把锅铲进行若干次翻转,让这些烧饼的大小有序(小的在上,大的在下)? 设想一下用锅铲翻转一堆烧饼的情景,其实是有一点限制的,我们每次只能将最上面的若干块饼子翻转: 我们的问题是, 如何使用算法得到一个翻转序列,使得烧饼堆 阅读全文
posted @ 2020-02-17 11:14 labuladong 阅读(616) 评论(0) 推荐(0) 编辑
摘要: 对括号的合法性判断是一个很常见且实用的问题,比如说我们写的代码,编辑器和编译器都会检查括号是否正确闭合。而且我们的代码可能会包含三种括号 ,判断起来有一点难度。 本文就来聊一道关于括号合法性判断的算法题,相信能加深你对 栈 这种数据结构的理解。 题目很简单,输入一个字符串,其中包含 六种括号,请你判 阅读全文
posted @ 2020-02-17 11:13 labuladong 阅读(1165) 评论(0) 推荐(0) 编辑
摘要: 回文串是面试常常遇到的问题(虽然问题本身没啥意义),本文就告诉你回文串问题的核心思想是什么。 首先,明确一下什: 回文串就是正着读和反着读都一样的字符串 。 比如说字符串 和 都是回文串,因为它们对称,反过来还是和本身一样。反之,字符串 就不是回文串。 可以看到回文串的的长度可能是奇数,也可能是偶数 阅读全文
posted @ 2020-02-17 11:12 labuladong 阅读(1080) 评论(0) 推荐(0) 编辑
摘要: 这篇文章就给你讲明白两个问题: 1、到底什么才叫「最优子结构」,和动态规划什么关系。 2、为什么动态规划遍历 数组的方式五花八门,有的正着遍历,有的倒着遍历,有的斜着遍历。 一、最优子结构详解 「最优子结构」是某些问题的一种特定性质,并不是动态规划问题专有的。也就是说,很多问题其实都具有最优子结构, 阅读全文
posted @ 2020-02-17 11:10 labuladong 阅读(729) 评论(0) 推荐(0) 编辑
摘要: 反转单链表的迭代实现不是一个困难的事情,但是递归实现就有点难度了,如果再加一点难度,让你仅仅反转单链表中的一部分,你是否能 够递归实现 呢? 本文就来由浅入深,step by step 地解决这个问题。如果你还不会递归地反转单链表也没关系, 本文会从递归反转整个单链表开始拓展 ,只要你明白单链表的结 阅读全文
posted @ 2020-02-17 10:11 labuladong 阅读(599) 评论(0) 推荐(0) 编辑
摘要: 我把双指针技巧再分为两类,一类是「快慢指针」,一类是「左右指针」。前者解决主要解决链表中的问题,比如典型的判定链表中是否包含环;后者主要解决数组(或者字符串)中的问题,比如二分查找。 一、快慢指针的常见算法 快慢指针一般都初始化指向链表的头结点 head,前进时快指针 fast 在前,慢指针 slo 阅读全文
posted @ 2020-02-17 10:10 labuladong 阅读(839) 评论(0) 推荐(0) 编辑
摘要: 上篇文章聊了高楼扔鸡蛋问题,讲了一种效率不是很高,但是较为容易理解的动态规划解法。后台很多读者问如何更高效地解决这个问题,今天就谈两种思路,来优化一下这个问题,分别是二分查找优化和重新定义状态转移。 如果还不知道高楼扔鸡蛋问题的读者可以看下「经典动态规划:高楼扔鸡蛋」,那篇文章详解了题目的含义和基本 阅读全文
posted @ 2020-02-17 10:09 labuladong 阅读(1155) 评论(0) 推荐(0) 编辑
摘要: 这是好久之前的一篇文章「学习数据结构和算法的框架思维」的修订版。之前那篇文章收到广泛好评,没看过也没关系,这篇文章会涵盖之前的所有内容,并且会举很多代码的实例,教你如何使用框架思维。 首先,这里讲的都是普通的数据结构,咱不是搞算法竞赛的,野路子出生,我只会解决常规的问题。另外,以下是我个人的经验的总 阅读全文
posted @ 2020-02-17 10:08 labuladong 阅读(1935) 评论(0) 推荐(1) 编辑
摘要: 一、什么是 LRU 算法 就是一种缓存淘汰策略。 计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新内容腾位置。但问题是,删除哪些内容呢?我们肯定希望删掉哪些没什么用的缓存,而把有用的数据继续留在缓存里,方便之后继续使用。那么,什么样的数据,我们判定为「有用的」的数据呢? LRU 缓存淘汰算法 阅读全文
posted @ 2020-02-17 10:07 labuladong 阅读(5649) 评论(0) 推荐(0) 编辑
我的公众号 labuladong,专注于 LeetCode 刷题,欢迎关注。