自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 动态规划高频问题

我们现在来总结一下求最值型DP的步骤:1.确定状态和子问题,从最后一步开始(最优策略中使用的最后一枚硬币ak)推导f(n)与子问题之间的关系,然后将其化成子问题(最少的硬币拼出更小的面值27-ak)。2.通过状态,我们可以得到状态转移方程:f[x]=min{f[x-2]+1,f[x-5]+1,f[x-7]+1}3.处理初始条件和边界情况。f[0]=0,其他的如果不能拼出来就标记为f[X]=正无穷。4.从小到大开始计算。这里就是从f[0]、f[1]、f[2]..向后计算。

2023-12-17 15:44:10 1641

原创 动态规划是怎么回事

虽然谁都知道动态规划(Dynamic Programming,简称DP)难,但是没几个人能说清啥是DP。而且即使将DP的概念写出来也没几个人看懂到底啥意思。下面我们就从一个简单例子来逐步拆解这个复杂的解释。

2023-12-16 21:56:33 833

原创 继续看回溯问题

关卡名继续看回溯问题我会了✔️内容1.复习递归和N叉树,理解相关代码是如何实现的2.理解回溯到底怎么回事3.掌握如何使用回溯来解决二叉树的路径问题。

2023-12-15 20:01:26 926

原创 回溯热门问题

关卡名回溯热门问题我会了✔️内容1.组合总和问题2.分割回文串问题3.子集问题4.排列问题5.字母全排列问题6.单词搜索。

2023-12-14 22:59:59 924

原创 透析回溯的模板

关卡名认识回溯思想我会了✔️内容1.复习递归和N叉树,理解相关代码是如何实现的2.理解回溯到底怎么回事3.掌握如何使用回溯来解决二叉树的路径问题回溯可以视为递归的拓展,很多思想和解法都与递归密切相关,在很多材料中都将回溯都与递归同时解释,例如本章2.1的路径问题就可以使用递归和回溯两种方法来解决。因此学习回溯时,我们对比递归来分析其特征会理解更深刻。其实回溯本质就这么个过程,请读者学习本章时认真揣摩这个过程。

2023-12-13 22:07:27 782

原创 透析跳跃游戏

关卡名理解与贪心有关的高频问题我会了✔️内容1.理解跳跃游戏问题如何判断是否能到达终点2.如果能到终点,如何确定最少跳跃次数。

2023-12-11 23:00:46 928

原创 盘点面试大热门之区间问题

关卡名理解与贪心有关的高频问题我会了✔️内容1.理解区间问题如何解决2.理解字符串分割问题3.理解加油站问题如何解决。

2023-12-11 15:35:23 872

原创 贪心其实很简单

关卡名认识贪心思想我会了✔️内容1.复习一维数组,对数组进行多轮插入或者删除时会频繁移动数据,理解双指针是如何避免该问题的2.理解滑动窗口的原理和适用场景3.掌握窗口变与不变的两种情况是如何用来解题的。

2023-12-11 08:48:19 893

原创 滑动窗口与堆结合

每当我们向右移动窗口时,我们就可以把一个新的元素放入优先队列中,此时堆顶的元素就是堆中所有元素的最大值。然而这个最大值可能并不在滑动窗口中,在这种情况下,这个值在数组 nums 中的位置出现在滑动窗口左边界的左侧。因此,当我们后续继续向右移动窗口时,这个值就永远不可能出现在滑动窗口中了,我们可以将其永久地从优先队列中移除。此时,堆顶元素就是滑动窗口中的最大值。为了方便判断堆顶元素与滑动窗口的位置关系,我们可以在优先队列中存储二元组 (num,index),表示元素num 在数组中的下标为index。

2023-12-10 14:43:04 362

原创 滑动窗口经典问题

关卡名滑动窗口高频问题我会了✔️内容1.掌握最长子串问题2.理解长度最小的子数组问题3.掌握盛水最多的容器问题4.理解异位词问题如何解决。

2023-12-09 15:10:01 862

原创 原来滑动窗口如此简单

关卡名认识滑动窗口我会了✔️内容1.复习一维数组,理解双指针的作用和工作原理2.理解滑动窗口的原理和适用场景3.掌握窗口变与不变的两种情况是如何用来解题的。

2023-12-08 13:46:16 819

原创 继续研究超大规模数据场景的问题

关卡名继续海量数据场景下的热门算法题我会了✔️1. 对20GB文件进行排序2. 超大文本中搜索两个单词的最短距离3. 从10亿数字中寻找最小的100万个数字。

2023-12-07 09:43:24 846

原创 海量数据场景下的热门算法题

关卡名海量数据场景下的热门算法题我会了✔️内容1.从40个亿中产生一个不存在的整数2. 用 2GB 内存在 20 亿个整数中找到出现次数最多的数3.从100 亿个 URL中查找的问题4. 40 亿个非负整数中找到出现两次的数和所有数的中位数。

2023-12-07 09:19:18 969

原创 位运算在查找重复元素中的妙用

关卡名用4KB内存寻找重复元素我会了✔️内容1.理解如何用4KB内存寻找重复元素本关所有题目的重点都是理解如何解决就好,面试问的时候能够将问题描述清楚,不用写代码。在海量数据中,此时普通的数组、链表、Hash、树等等结构有无效了 ,因为内存空间放不下了。而常规的递归、排序,回溯、贪心和动态规划等思想也无效了,因为执行都会超时,必须另外想办法。这类问题该如何下手呢?这里介绍三种非常典型的思路:1.使用位存储,使用位存储最大的好处是占用的空间是简单存整数的1/8。

2023-12-06 16:55:43 354

原创 堆能高效解决的经典问题

关卡名堆能高效解决的经典问题我会了✔️内容1.掌握数组中寻找第K的元素2.理解堆排序的原理3.合并K个排序链表。

2023-12-06 12:46:19 809

原创 算法通关村——原来这就是堆

堆结构是一种非常重要的基础数据结构,也是算法的重要内容,很多题目甚至只能用堆来进行,所以我们必须先明确什么类型的题目可以用堆,以及如何使用堆来解决。由于堆的构造和维护过程都非常复杂,因此面试时一般不需要手写堆的实现过程,但是java、python、C++已经提供了一些工具,因此需要知道思路就可以。本关,我们主要介绍堆如何增删改查的,不用管代码怎么写,后面我们再介绍如何使用堆来解决问题关卡名堆结构我会了✔️内容1.理解堆是如何构造的2.理解堆是如何添加元素的3.掌握堆是如何删除元素的。

2023-12-06 09:35:14 708

原创 算法通关村——数论问题

数论是一个很重要的学科,覆盖领域极广,小到小学的智力问题,大到世界顶级科学家都一直在研究相关问题,因此其难度跨度非常大。在程序设计里 ,也经常会出现数论的问题,但是,这些一般都是比较基本的数论问题,例如素数问题、幂、对数、阶乘、幂运算、初等数论、几何问题、组合数学等等。这些问题中,组合数学等适合在回溯里讲解。几何问题则过于繁琐, 不利于做题。本部分,我们暂时只以宿舍和合数的问题来讲解,后续找到合适的题目继续来补充。关卡名数论问题我会了✔️内容1.理解素数和合数如何判断。

2023-12-05 21:01:16 1043

原创 数字与数学高频问题

关卡名数字与数学高频问题我会了✔️内容1.掌握数组实现加法的方法2.掌握高精度计算的实现方法3.掌握幂运算的技巧。

2023-12-05 09:23:51 1172

原创 数字与数学基础问题

关卡名数字与数学基础问题我会了✔️内容1.数字里统计的处理技巧2.必须熟练掌握溢的处理方法3.掌握进制的处理方法。

2023-12-04 15:02:23 840

原创 字符串冲刺题

关卡名字符串冲刺题我会了✔️内容1.掌握最长公共前缀问题2.掌握字符串压缩问题3.如果想挑战一下就研究:表示数值的字符串。

2023-12-03 21:18:18 885

原创 字符串经典基础面试题

关卡名字符串经典基础面试题我会了✔️内容1.理解字符串反转的处理方法2.熟练掌握回文串的判断方法3.掌握字符串中搜索第一个唯一字符的方法4.掌握判断是否互为字符串重排的处理技巧。

2023-12-03 13:13:26 1177

原创 不简单的字符串转换问题

关卡名字符串:隐形的王者我会了✔️内容1.理解字符串的基本特征2.记住Java、C或者Python里字符串都是怎么用的3.掌握字符串转整数的几种场景和处理方法字符串里存放的可以是字母,可以是数字,也可以是特殊字符,字母又可以大写和小写,这就导致字符串有一类常见的转换的题目,这些题目无非就是这几种类型的相互转换。但是在转换过程中需要处理几种特殊情况:例如首先就是转之前先判断当前元素能不能转。如果是字符串转数字,则要考虑当前元素是不是数字。转完之后会不会溢出等。

2023-12-02 15:01:31 927

原创 位运算的高频算法题

关卡名位运算的高频算法题我会了✔️内容1.理解位运算如何统计1的个数的2.理解位运算如何实现加法3.理解递归乘法是如何实现的。

2023-12-02 13:27:23 832

原创 理解位运算的规则

关卡名理解位运算的规则我会了✔️内容1.理解位运算的基本规则2.理解移位的原理以及与乘除的关系3.掌握位运算的常用技巧在学习位操作之前,我们先明确数据在计算机中怎么表示的。我们明确原码、反码和补码的概念和表示方法,之后介绍位运算相关的问题。

2023-12-01 14:26:23 824

原创 数组中第K大的数字

这就是解决本问题的关键,既然知道26是第4大,那如果我要找第2大,一定是要到右边找。我们在堆部分分析过这个问题,这里看看如何基于快速排序来做,这个题目出现的频率非常高,甚至在很多时候,面试官直接要求基于快速排序来解决这个问题。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。我们还是看上面排序的序列:{26,53,48,15,13,48,32,15}输入: [3,2,3,1,2,4,5,5,6] 和 k = 4。输入: [3,2,1,5,6,4] 和 k = 2。

2023-12-01 10:36:54 352

原创 快速排序并不难

快速排序的核心框架是“二叉树的前序遍历+对撞型双指针”。我们在《一维数组》一章提到过”双指针思路“:在处理奇偶等情况时会使用两个游标,一个从前向后,一个是从后向前来比较,根据结果来决定继续移动还是停止等待。快速排序的每一轮进行的时候都是类似的双指针策略,而递归的过程本质上就是二叉树的前序递归调用。

2023-11-30 21:14:23 681

原创 透彻理解二叉树中序遍历的应用

关卡名二分搜索树我会了✔️内容1.有序数组转为二叉搜索树2.寻找两个正序数组的中位数。

2023-11-30 10:14:50 764

原创 二分查找与搜索树高频问题

关卡名逢试必考的二分查找我会了✔️内容1.山脉数组的峰顶索引2.旋转数字的最小数字3.寻找缺失数字4.优化求平方根5.中序与搜索树原理6.二叉搜索树中搜索特定值7.验证二叉搜索树基于二分查找思想,可以拓展出很多算法问题的,而且很多都是考察的热门, 这里我们整理了几道经典的问题。在前面我们发现很多题使用前序、后序或者层次遍历都可以解决,但几乎没有中序遍历的。这是因为中序与前后序相比有不一样的特征,例如中序可以和搜索树结合在一起,但是前后序则不行。

2023-11-29 20:53:06 1021

原创 透彻理解二分查找

关卡名逢试必考的二分查找我会了✔️内容1.二分查找是怎么工作的2.能基于递归和迭代方式,写出完美的二分查找3.如果存在重复元素,如何用二分查找查找可以很简单,也可以非常复杂,散列、动态规划等高难度算法都可以视为查找问题。我们这里先看一些基本问题。常见的查找算法有顺序查找、二分查找、插值查找,斐波那契查找,树表查找、分块查找、哈希查找等等。其实二分查找、插值查找以及斐波那契查找都可以归为一类——插值查找。插值查找和斐波那契查找是在二分查找的基础上的优化查找算法。

2023-11-27 20:09:04 797

原创 寻找祖先问题

本题是二叉树中最难的问题之一,我们一起来看看关卡名寻找祖先问题我会了✔️内容1.寻找祖先问题。

2023-11-26 10:06:35 907

原创 二叉树的深度和高度问题

关卡名二叉树的经典面试问题我会了✔️内容1.最大深度问题2.判断平衡树3.最小深度4.N叉树的最大深度给定二叉树 [3,9,20,null,null,15,7],如下图然后LeetCode给我们造了一堆的题目,现在一起来研究一下104、110和111三个题,这三个题看起来挺像的,都是关于深度、高度的。

2023-11-25 23:22:36 823

原创 二叉树的经典算法题

关卡名二叉树的经典面试问题我会了✔️内容1.判断两棵树是否相同2.判断两个树是否对称3.合并两颗二叉树4.寻找二叉树的所有路径5.路径总和问题6.翻转二叉树。

2023-11-25 14:11:01 865

原创 迭代实现二叉树的遍历

关卡名理解树的前中后序遍历, 以及如何基于迭代方式实现我会了✔️内容1.迭代实现二叉树树的前序遍历2.迭代实现二叉树的中序遍历3.迭代实现二叉树的后序遍历理论上,递归能做的迭代一定能做,但可能会比较复杂。上面几个递归的遍历方法,背都背下来了,所以有时候面试官要求不使用递归实现三种遍历,递归就是每次执行方法调用都会先把当前的局部变量、参数值和返回地址等压入栈中,后面在递归返回的时候,从栈顶弹出上一层的各项参数继续执行,这就是递归为什么可以自动返回并执行上一层方法的原因。

2023-11-25 12:18:17 662

原创 二叉树的层次遍历经典问题

广度优先在面试里出现的频率非常高,整体属于简单题,但是很多人面试遇到时就直接放弃了,实在可惜。我们本章就集中研究一下到底难在哪里。广度优先又叫层次遍历,基本过程如下:层次遍历就是从根节点开始,先访问根节点下面一层全部元素,再访问之后的层次,类似金字塔一样一层层访问。我们可以看到这里就是从左到右一层一层的去遍历二叉树,先访问3,之后访问1的左右子孩子 9 和20,之后分别访问9 和20的左右子孩子 [8,13]和[15,17],最后得到结果[3,9,20,8,13,15,17]。

2023-11-24 22:00:57 891 1

原创 算法通关村—如何使用中序和后序来恢复一颗二叉树

注意本关讲义我们主要看原理,不写可执行的代码,因此我们只用伪码,不提供各种语言的定义定义树的原理与前面讲的链表本质上是一样的,只不过多了一个指针,如果是二叉树,只要在链表的定义上增加一个指针就可以了:定义二叉树int val;这里本质上就是有两个引用,分别指向两个位置,为了便于理解,我们分别命名为左孩子和右孩子。如果是N叉树该如何定义呢?其实就是每个节点最多可以有N个指针指向其他地方,这是不用left和right,使用一个List就可以了,也就是:定义N叉树int val;

2023-11-24 10:52:08 829 1

原创 LRU的设计与实现

关卡名黄金挑战——LRU的设计与实现我会了✔️核心内容1.理解LRU的原理2.理解LRU是如何实现的3.能够通过代码实现LRU缓存是应用软件的必备功能之一,在操作系统,Java里的Spring、mybatis、redis、mysql等软件中都有自己的内部缓存模块,而缓存是如何实现的呢?在操作系统教科书里我们知道常用的有FIFO、LRU和LFU三种基本的方式。FIFO也就是队列方式不能很好利用程序局部性特征,缓存效果比较差,一般使用LRU(最近最少使用)和LFU(最不经常使用淘汰算法)比较多一些。

2023-11-23 22:04:02 992

原创 队栈和Hash的经典算法题

关卡名队栈和Hash的经典算法题我会了✔️内容1.如何用栈实现队列2.如何用队列实现栈3.三数之和如何做。

2023-11-23 17:50:13 20

原创 队列和Hash的特征

关卡名队列和Hash的特征我会了✔️内容1.Hash存储的原理2.Hash处理冲突的方法3.队列存储的基本特征4.如何使用链表来实现栈。

2023-11-23 10:28:23 18

原创 表达式问题

关卡名表达式问题我会了✔️内容1.理解计算器如何实现2.理解逆波兰表达式的实现方式。

2023-11-23 09:32:03 28

原创 栈的经典算法问题

关卡名栈的经典算法问题我会了✔️内容1.括号匹配问题2.最小栈3.最大栈。

2023-11-22 22:54:09 85

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除