算法&刷题
文章平均质量分 53
把苹果咬哭的测试笔记
喜欢分享软件测试、开发相关的各种知识。
展开
-
【LeetCode】235. 二叉搜索树的最近公共祖先
算法现在就是大厂、外企的硬指标。开发、测开、测试,想往上总是绕不开的。题目描述难度:【简单】 标签:【二叉树】给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”题目地址:https...原创 2021-12-07 22:30:00 · 99 阅读 · 0 评论 -
【LeetCode】404. 左叶子之和
算法现在就是大厂、外企的硬指标。开发、测开、测试,想往上总是绕不开的。题目描述难度:【简单】 标签:【二叉树】计算给定二叉树的所有左叶子之和。题目地址:https://leetcode-cn.com/problems/sum-of-left-leaves/示例3 / \ 9 20 / \ 15 7在这个二叉树中,有两个左叶子,分别是 9 和 1...原创 2021-12-01 23:12:00 · 188 阅读 · 0 评论 -
【LeetCode】112. 路径总和
算法现在就是大厂、外企的硬指标。开发、测开、测试,想往上总是绕不开的。题目描述难度:【简单】 标签:【二叉树】给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum叶子节点 是指没有子节点的节点。题目地址:https://leetcode-cn.com/...原创 2021-11-30 23:04:00 · 241 阅读 · 0 评论 -
【LeetCode】617. 合并二叉树
算法现在就是大厂、外企的硬指标。开发、测开、测试,想往上总是绕不开的。题目描述难度:【简单】 标签:【二叉树】给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。题目地址:https:/...原创 2021-11-30 22:27:00 · 83 阅读 · 0 评论 -
【LeetCode】111. 二叉树的最小深度(BFS 解题套路框架,要会默写)
一、BFS 知识点BFS 就是广度优先 (Breadth first search)。与之对应的还有深度优先 (Depth first search)。网上找到一篇文章,比较通俗易懂的介绍了这 2 者。今天重点是 BFS ,用它解决比如找到从起点 start 到终点 target 的最近距离问题(黑色起点、红色终点)。BFS 相对 DFS 的最主要的区别是:BFS 找到的路径一定是最短...原创 2021-12-05 21:46:00 · 184 阅读 · 0 评论 -
【LeetCode】543. 二叉树的直径
算法现在就是大厂、外企的硬指标。开发、测开、测试,想往上总是绕不开的。题目描述难度:【简单】 标签:【二叉树】给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。题目地址:https://leetcode-cn.com/problems/diameter-of-binary-tree/descripti...原创 2021-11-29 23:51:00 · 265 阅读 · 0 评论 -
【LeetCode】111. 二叉树的最小深度
算法现在就是大厂、外企的硬指标。开发、测开、测试,想往上总是绕不开的。题目描述难度:【简单】标签:【二叉树】给定一个二叉树,找出其最小深度。说明:叶子节点是指没有子节点的节点。题目地址:https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/示例示例 1:输入:root = [3,9,20,null,nul...原创 2021-11-29 22:59:00 · 115 阅读 · 0 评论 -
【LeetCode】104. 二叉树的最大深度
算法现在就是大厂、外企的硬指标。开发、测开、测试,想往上总是绕不开的。题目描述难度:【简单】标签:【二叉树】给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。题目地址:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/示例...原创 2021-11-28 20:58:00 · 77 阅读 · 0 评论 -
【LeetCode】108. 将有序数组转换为二叉搜索树
题目描述难度:【简单】标签:【二叉树】给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。题目地址:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tre...原创 2021-11-28 15:20:00 · 89 阅读 · 0 评论 -
【LeetCode】110. 平衡二叉树
题目描述难度:【简单】标签:【二叉树】给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。题目地址:https://leetcode-cn.com/problems/balanced-binary-tree/示例示例 1输入:root = [3,9,20,null,null,15,7]输...原创 2021-11-28 15:42:00 · 110 阅读 · 0 评论 -
【LeetCode】144. 二叉树的前序遍历
题目描述难度:【简单】标签:【二叉树】给你二叉树的根节点 root ,返回它节点值的 前序 遍历。题目地址:https://leetcode-cn.com/problems/binary-tree-preorder-traversal/示例示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入...原创 2021-11-27 15:20:00 · 234 阅读 · 0 评论 -
【LeetCode】100. 相同的树
题目描述难度:【简单】标签:【二叉树】给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。题目地址:https://leetcode-cn.com/problems/same-tree/示例示例 1输入:p = [1,2,3], q = [1,2,3]输出:true示例 2输入:p = ...原创 2021-11-27 22:17:00 · 293 阅读 · 0 评论 -
【LeetCode】145. 二叉树的后序遍历
题目描述难度:【简单】标签:【二叉树】给定一个二叉树,返回它的 后序 遍历。题目地址:https://leetcode-cn.com/problems/binary-tree-postorder-traversal/示例示例 :输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1]题目大意原生的二叉树后序遍历用...原创 2021-11-27 15:29:00 · 117 阅读 · 0 评论 -
【LeetCode】94. 二叉树的中序遍历
题目描述难度:【简单】标签:【二叉树】给定一个二叉树的根节点 root ,返回它的 中序 遍历。题目地址:https://leetcode-cn.com/problems/binary-tree-inorder-traversal/示例示例 1:输入:root = [1,null,2,3]输出:[1,3,2]示例 2:输入:root = []输出:[]示例 3:输入:r...原创 2021-11-27 10:13:00 · 249 阅读 · 0 评论 -
【刷题】LeetCode刷刷刷 — 2021-06-07
一、扑克牌中的顺子题目描述从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。示例示例 1:输入: [1,2,3,4,5]输出: True 示例 2:输入: [0,0,1,2,5]输出: True解题class Solution: ...原创 2021-06-08 12:08:00 · 373 阅读 · 0 评论 -
【LeetCode】965. 单值二叉树
题目描述难度:【简单】标签:【二叉树】如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。示例示例 1输入:[1,1,1,1,1,null,1]输出:true示例 2输入:[2,2,2,5,2]输出:false题目大意所有二叉树的节点的值都一样,返回 true,否则返回 false 。解题...原创 2021-11-27 09:08:00 · 111 阅读 · 0 评论 -
【LeetCode】101. 对称二叉树
题目描述难度:【简单】标签:【二叉树】给定一个二叉树,检查它是否是镜像对称的。题目地址:https://leetcode-cn.com/problems/symmetric-tree/示例例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像...原创 2021-11-27 08:28:00 · 184 阅读 · 0 评论 -
【刷题】LeetCode刷刷刷 — 2021-06-01
一、旋转字符串题目描述给定两个字符串, A和B。A的旋转操作就是将A 最左边的字符移动到最右边。例如, 若A = 'abcde',在移动一次之后结果就是'bcdea'。如果在若干次旋转操作之后,A能变成B,那么返回True。示例示例 1:输入: A = 'abcde', B = 'cdeab'输出: true示例 2:输入: A = 'abcde', B ...原创 2021-06-02 12:58:00 · 255 阅读 · 0 评论 -
【LeetCode】226. 翻转二叉树
题目描述难度:【简单】标签:【二叉树】翻转一棵二叉树。题目地址:https://leetcode-cn.com/problems/invert-binary-tree/示例输入 4 / \ 2 7 / \ / \1 3 6 9输出 4 / \ 7 2 / \ / \9 6 3 1题目大...原创 2021-11-26 20:31:00 · 250 阅读 · 0 评论 -
【LeetCode】700. 二叉搜索树中的搜索
二叉搜索树(BST),首先它是个二叉树。做题之前看了下以前的笔记:【树与二叉树】:https://www.cnblogs.com/pingguo-softwaretesting/p/14587752.html【二叉树的遍历,前序、中序和后序】:https://www.cnblogs.com/pingguo-softwaretesting/p/14615248.html二叉树(BST)...原创 2021-11-26 20:15:00 · 249 阅读 · 0 评论 -
【小白学算法】6.单链表的修改、删除
接着上一章继续来看单链表。之前对单链表进行了遍历、插入的操作,本章继续用代码来实现修改以及删除。一、单链表的修改修改结点信息首先需要先找到对应的结点,接着上一章的代码,也就是英雄的排名no是不能修改的,要用来找结点。其他的信息就可以动了。另外,还要考虑到单链表中找不到对应要修改的结点的情况。这里代码就不全贴出来了,现在继续在SingleLinkedList类中增加修改结点信息的方法:...原创 2021-03-26 10:08:00 · 98 阅读 · 0 评论 -
【小白学算法】11. 排序算法-冒泡排序,以及优化
一、冒泡排序1.介绍冒泡排序基本思想:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值。如果发现逆序则交换,让值较大的元素逐渐从前向后移动。就像水底下的气泡一样逐渐向上冒。2.理解举例:将5个无序的数使用冒泡从小到大排序,[3, 9, -1, 10, -2]。不着急写代码,先来根据冒泡排序的思想,手动的来排一次,记录下过程。第一趟排序 // 每次从头...原创 2021-04-26 23:30:00 · 121 阅读 · 0 评论 -
【小白学算法】9.算法小白不再恐惧LeetCode刷题
最近业务比较繁忙,又补了上个Q遗留的自动化接口case等等杂事,晚上用来系统学算法的时间比较少了。另外,在steam又新买了个《地平线4》,刚玩也有点停不下来,哈哈。但是,最近也并不是啥也没干。都说学以致用,之前看视频看书了解了链表二叉树这些,但是具体能干啥、怎么用,还是两眼一抹黑。不过所幸得到奇哥指点,分享给我另一个关于算法学习的公众号《labuladong》,这里面有很多算法实战的要...原创 2021-04-11 00:46:00 · 83 阅读 · 0 评论 -
【小白学算法】8.二叉树的遍历,前序、中序和后序
二叉树的遍历,同样也是为了访问到树中的每个结点(仅一次)。不过,由于树的结构与之前的线性存储不同,从根结点开始,二叉树可以有多种的访问次序的选择。按照我们通常的从左到右的习惯,常见的遍历次序有3种:前序、中序、后续。一、什么是前序、中序、后序为了方便说明,暂且我们把访问结点,就当做是打印输出这个结点信息。那么如何区分前中后,也正是根据输出的先后顺序来定的。前序遍历:先输出父节点,再...原创 2021-04-03 22:45:00 · 122 阅读 · 0 评论 -
【小白学算法】7.树与二叉树
树是另一种存储结构。跟之前说的线性结构不同,树是一种一对多的数据结构。一、树这里的树跟现实中的大树很像,有根有叶。但是现实的大树根部有很多根须,而这里的树只有一个根结点。看图说话,了解下常用到的术语:结点点:就是图里的一个个的圆圈了,也可以叫结点对象根结点:顶部的结点A,数据结构的树只能有一个根结点父结点:B是D、E的父结点,D是H的父结点子结点:F是C的子结点度:结点拥有的子...原创 2021-03-31 12:25:00 · 67 阅读 · 0 评论 -
【小白学算法】5.单链表,插入、读取
链表其实也就是 线性表的链式存储结构,与之前讲到的顺序存储结构不同。我们知道顺序存储结构中的元素地址都是连续的,那么这就有一个最大的缺点:当做插入跟删除操作的时候,大量的元素需要移动。如图所示,元素在内存中的位置是挨着的,当中有元素被删除,就产生空隙,于是乎后面的元素需要向前挪动去弥补。正是因为顺序存储有这这个缺点,所以链式存储结构就变得非常的有意义。一、链表的存储形式首先,链表是有序...原创 2021-03-18 00:20:00 · 167 阅读 · 0 评论 -
【小白学算法】4. 循环队列
在上一章中,使用了数组模拟了队列。但是留下的问题是,把数据取完后,再往里加数据就不行了。一、假溢出这是因为数组的末尾已经被占用了,入队会继续在数组后面增加,于是产生数组越界。但是实际上,数组里是有空闲位置的,这种也可以叫“假溢出”。为了解决“假溢出”的问题,于是乎有了循环队列。既然数组后面满了,头部有空,那继续加进来的元素从头开始放即可。接着上图,这时候有a6入队,于是rear的下...原创 2021-03-13 23:38:00 · 120 阅读 · 0 评论 -
【小白学算法】12. 排序算法-选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。比如说现在有个数组[6,3,5,7,0],对其从小到大进行排序,那么选择排序的过程应该是这样的:从这个过程中可...原创 2021-05-04 23:35:00 · 100 阅读 · 0 评论 -
【小白学算法】3. 队列
一、什么是队列队列是一个有序列表,可以用数组或者链表来实现。遵循先入先出的原则,即:先存入队列的数据,要先取出。后存入的的数据,后取出。看一张队列的模拟图,1,2,3表示同一个队列Queue。在队列中有2个指针,front表示队首,rear表示队尾。图1中表示队列里还没有数据,所以front跟rear初始化都是-1。当图2中有数据进行存入的时候,front没变,而rear则随着...原创 2021-03-11 00:24:00 · 63 阅读 · 0 评论 -
【小白学算法】2. 稀疏数组
一、什么是稀疏数组当一个数组a中大部分元素为0,或者为同一个值,那么可以用稀疏数组b来保存数组a。首先,稀疏数组是一个数组,然后以一种特定的方式来保存上述的数组a,具体处理方法:记录数组a一共有几行几列记录a中有多少个不同的值最后记录不同值的元素所在行列,以及具体的值,放在一个小规模的数组里,以缩小程序的规模。这个小规模的数组,就是稀疏数组。举个栗子,左侧是一个二维数组,一共5...原创 2021-03-09 23:07:00 · 161 阅读 · 0 评论 -
【小白学算法】10.递归的调用机制、使用时要注意的规则
简单来说,递归就是自己调用自己,在每次调用时传入不同的变量。递归有助于解决复杂的问题,同时让代码变得简洁。在之前的文章中,对递归有过简单的介绍,现在进一步了解下递归的调用机制。一、递归的调用机制先上一段简单的递归调用的代码:package recursion;public class RecursionTest { public static void main(String...原创 2021-04-23 00:05:00 · 137 阅读 · 0 评论 -
【小白学算法】1. 什么是线性结构与非线性结构
话说我一个测试人员为啥要学算法呢?说白了,都是生活所迫。现在大厂面试哪个不考点算法,如果想过关,那就得刷题,但是一个小白,直接刷题只会被困难劝退。所以,索性就学一下算法,不说能学的多深,但是总归不至于抓瞎。言归正传,都知道数据结构是算法的基础。也就是说,虽然你学好数据结构不一定就能做好题,但是你学不好数据结构,一定做不好题。数据结构可以分为2大类:线性结构与非线性结构。一、线性结构...原创 2021-03-09 00:42:00 · 149 阅读 · 0 评论 -
【简单算法】1.两数之和,给定整数数组和目标值,找出数组中2数之和等于目标值的元素...
接触了代码,那么算法始终是绕不开的一个重点。算法对于开发人员,在日常之中的作用很大,但是对于测试人员来说,实际编码中用到的似乎不是很多。不过,现在大厂的测试开发的面试,算法是必考的,而且这也的确是你的代码功底的一项重要体现,学学没坏处。关于算法的基础知识,之前自己也买过书,但是学习的断断续续的,练习刷题就更加稀少了。所以,打算日后做一个【简单算法】的记录:第一,是为了梳理解题思路,......原创 2020-12-17 18:58:00 · 542 阅读 · 0 评论 -
【简单算法】什么是复杂度?
在上一篇文章里,有看到一个简单算法题的2个解法,我们运用了复杂度分析来判断哪个解法更合适。这里的复杂度,就是用于衡量程序的运行效率的重要度量因素。虽然有句俗话“不管是白猫还是黑猫,抓到老鼠就是好猫”,这句话是站在结果导向的,没错。但是如果有个程序要去处理海量数据,一个程序员写的要执行2天,而另一个程序员只要半小时,那么第二种显然更适合我们的实际需求。一、什么是复杂度复杂度是一个关于输......原创 2020-12-22 10:43:00 · 247 阅读 · 0 评论 -
【LeetCode】121. 买卖股票的最佳时机(一次遍历)
算法现在就是大厂、外企的硬指标。开发、测开、测试,想往上总是绕不开的。题目描述难度:【简单】 标签:【数组】、【动态规划】给定一个数组 prices ,它的第i 个元素prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最......原创 2022-01-13 19:48:00 · 81 阅读 · 0 评论 -
【LeetCode】747. 至少是其他数字两倍的最大数
算法现在就是大厂、外企的硬指标。开发、测开、测试,想往上总是绕不开的。这是今天的每日一题,看到是个简单的,就做了下(非官方题解)。题目描述难度:【简单】 标签:【数组】、【排序】给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1 。题目地......原创 2022-01-13 19:56:00 · 100 阅读 · 0 评论