![](https://img-blog.csdnimg.cn/2c4e94493eed49ffad04425f4f976881.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode
文章平均质量分 53
日常刷题积累,有兴趣的可以一看和交流
奋斗&&奋进
I want A++
展开
-
如何等概率的返回已经遍历到的节点?
蓄水池原创 2022-06-13 15:28:59 · 247 阅读 · 0 评论 -
玩两道广度优先搜索算法
了解bfs框架,以及思想,注意事项等原创 2022-06-09 15:03:19 · 255 阅读 · 1 评论 -
回溯之N皇后(选择列表是二维的,全排列的选择列表是一维的)
最好是先理解全排列的回溯算法怎么用,再来看这个选择列表是二维情况时的回溯算法,回溯算法的本质就是穷举,希望结合全排列和N皇后问题,能对回溯算法有一个较为清晰的认识,个人认为回溯算法的难点在于怎么去维护路径和选择列表...原创 2022-06-04 13:09:59 · 140 阅读 · 0 评论 -
理解回溯算法的一道基础题之全排列问题
回溯算法的本质就是穷举原创 2022-06-04 11:47:30 · 198 阅读 · 0 评论 -
如何利用归并排序的merge
题干:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。思路:首先要明确升序数组就没有所谓的逆序对,降序数组就是任意抽取两个元素都构成逆序对,换句话说,数完逆序对,我把可以把数过的区间进行排序,后续在统计别的逆序对对数的时候就可以避免重复计算逆序对有两种数法,一种是数这个数后面有多少个元素比自己小,那针对这个位置的逆序对的对数就是多少个,反过来,也可以数一个元素前面有多少个元素比自己大,那就针对该位置有多少个逆序对,之所以不同时数前面原创 2022-06-02 10:55:06 · 107 阅读 · 0 评论 -
验证二叉搜索性的递归解法
题干:给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。思路:本题的直观想法可能上来就是站在一个节点上看这个节点的值是不是比它的左子树的节点值更大,并且还要比它的右子树的节点值更小,如果二者都满足,则说明,当前节点检查完毕,那就可能写出错误代码:如上图,虽然每个节点的值都能在遍历过程中通过检查,但是节点值为5的节点,显然比它的右子树中的原创 2022-06-01 16:25:03 · 150 阅读 · 0 评论 -
带权重的随机选择算法
带权重的随机选择算法https://leetcode.cn/problems/random-pick-with-weight/题干:给你一个 下标从 0 开始 的正整数数组 w ,其中 w[i] 代表第 i 个下标的权重。请你实现一个函数 pickIndex ,它可以 随机地 从范围 [0, w.length - 1] 内(含 0 和 w.length - 1)选出并返回一个下标。选取下标 i 的 概率 为 w[i] / sum(w) 。例如,对于 w = [1, 3],挑选下标 0 的概原创 2022-05-27 16:10:31 · 947 阅读 · 0 评论 -
差分数组算法
差分数组适用于对数组某些区间元素频繁的增减问题如果是对数组某些区间频繁查询,那就是前缀和问题对于差分数组问题,可以定死一个类专门对数组作差分如:对上述数组做这些操作:a:[1,3]每个元素加2b:[2,4]每个元素减3…如果暴力求解是不一定能过的.写一个专门做差分的类:class Difference{ //差分数组 private int[] diff; //根据给定的数组构造初始化一个差分数组 public Differen原创 2022-05-26 09:14:55 · 523 阅读 · 0 评论 -
力扣 剑指offer11(旋转数组的最小数字)
力扣 剑指offer11(旋转数组的最小数字)题干:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为 1。注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2],原创 2022-04-04 17:25:39 · 844 阅读 · 0 评论 -
剑指offer65-不用算术运算符做加法
力扣 剑指offer65(不用算术运算符做加法)题干:写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。示例:输入: a = 1, b = 1输出: 2思路:观察按位"与":如5+6=11可以发现:两个数做按位与时,只有需要进位的二进制位才会为1,没数据或者不用进位的都是0观察按位"异或":如5+6=11可以观察发现:两个数按位异或时:只有对应二进制位有数据且相加不用进位时才会是1,没数据或者有数据相加但要进位时的二进制原创 2022-03-30 16:31:44 · 994 阅读 · 0 评论 -
力扣692(前K个高频单词)
力扣692(前k个高频单词)题干给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率, 按字典顺序 排序。示例思路第一步:统计每个单词出现的次数(使用map)第二步:使用topK思想将键值对进行topK式存储,之所以要存储键值对,是因为,同次数的单词需要比较字典序的先后来判断谁去谁留,这里有个较容易失误的点:由于是找前k个value值最大的键值对,那按道理是要建立一个小根堆,但有个特殊情况:原创 2022-03-22 11:09:19 · 538 阅读 · 0 评论 -
力扣771(宝石与石头)
题干给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。字母区分大小写,因此 “a” 和 “A” 是不同类型的石头。示例思路用set可以降重的功能,把宝石集合先弄出来,然后手上拿着一堆石头,一个个与对照宝石库里是不是有这个石头,有,那这个石头就是一个宝石,返回石头堆里的宝石数量即可代码class Solution { public int num原创 2022-03-22 10:41:09 · 244 阅读 · 0 评论 -
力扣138题(复制带随机指针的链表)
力扣138题(复制带随机指针的链表)题干给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。例如,如果原链表中有 X 和 Y 两个节点,其中 X.r原创 2022-03-22 10:32:24 · 114 阅读 · 0 评论 -
力扣110(平衡二叉树)
力扣110(平衡二叉树)给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。解题思路涉及树高度的求解,所以先掌握树的高度如何求解,请参照我另一篇文章每次递归需要干的事:因为每次递归给的都是一棵树的根的节点,所以确定以这个节点作为根的树,其左右子树是否满足平衡,满足就是符合题意的。核心思想是:以根->左->右为序依次将不为null的节点作为根,去判断此时树的左右子树是否满足平衡即可。遍历原创 2022-02-03 20:31:45 · 78 阅读 · 1 评论 -
力扣572(另一棵树的子树)
力扣572(另一棵树的子树)给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subtree-of-another-tree解题思路子树关系无非两种原创 2022-02-03 19:57:49 · 661 阅读 · 0 评论 -
力扣100(相同的树)
力扣100(相同的树)给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例:输入:p = [1,2,3], q = [1,2,3]输出:true解题思想两棵树相同须满足两个条件,首先树的结构要相同,其次在结构相同的情况下,每个节点的值要相等。class Solution { public boolean isSameTree(TreeNode p, TreeNode q) {原创 2022-02-03 19:18:30 · 860 阅读 · 0 评论 -
力扣104(求二叉树的最大深度)
力扣104(求二叉树的最大深度)给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree解题思路整个树的最大深度其实就是r原创 2022-02-03 17:42:42 · 137 阅读 · 0 评论 -
力扣225(用队列实现栈)
力扣225(用队列实现栈)请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from原创 2022-01-31 10:48:23 · 505 阅读 · 0 评论 -
力扣232(用栈实现队列)
力扣232(用栈实现队列)请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false来源:力扣(LeetCode)链接:https://leetcode-cn.com/problem原创 2022-01-30 10:34:00 · 828 阅读 · 0 评论 -
力扣622(设计循环队列)
力扣622(设计循环队列)设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。你的实现应该支持如下操作:MyCircularQueue(k): 构造器,设置队列长度为 k 。Front: 从队首获取元素原创 2022-01-29 12:36:10 · 119 阅读 · 0 评论 -
力扣155(实现最小栈)
力扣155(实现最小栈)设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/min-stack示例:输入:[“MinStack”,“push”,“push”,“push”,“getMin”,“po原创 2022-01-29 10:48:19 · 119 阅读 · 0 评论 -
力扣20(有效的括号)
力扣20(有效的括号)给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-parentheses示例:输入:s = "()"输出:true解题思路使用栈的结构(先进的后出去)简单观察可以看出,只要是左括号,无脑压栈就可以了,而遇到右原创 2022-01-28 20:52:06 · 91 阅读 · 0 评论 -
剑指offer31.栈的压入、弹出
剑指offer31.栈的压入、弹出输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof示例:原创 2022-01-28 19:24:20 · 102 阅读 · 0 评论 -
力扣150(求逆波兰表达式的值)
力扣150(求逆波兰表达式的值)有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。注意 两个整数之间的除法只保留整数部分。可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/evaluate-reverse-polish-notation示例:输入:tokens = ["2","1","+","3","*"原创 2022-01-28 18:09:37 · 645 阅读 · 0 评论 -
LeetCode第1629题:找最大持续时间
LeetCode第1629题????LeetCode 设计了一款新式键盘,正在测试其可用性。测试人员将会点击一系列键(总计 n 个),每次一个。给你一个长度为 n 的字符串 keysPressed ,其中 keysPressed[i] 表示测试序列中第 i 个被按下的键。releaseTimes 是一个升序排列的列表,其中 releaseTimes[i] 表示松开第 i 个键的时间。字符串和数组的 下标都从 0 开始 。第 0 个键在时间为 0 时被按下,接下来每个键都 恰好 在前一个键松开时被按下。原创 2022-01-10 22:51:45 · 173 阅读 · 1 评论