
记录算法题
文章平均质量分 55
记录算法题
morning sunshine
用心记笔记。
展开
-
单调栈解法--栈内元素递增递减
5.2、如果当前元素小于当前栈顶索引所在元素,则result[当前元素所在位置]=当前元素所在索引与栈顶索引之差;并将该元素索引进栈;* 6、直到栈为空、跳出while循环,则result[当前元素所在位置]=0,将该元素索引进栈;* 5.1、如果当前元素大于等于当前栈顶索引所在元素,则栈顶元素出栈,continue;* 4、如果当前栈为空,则直接result[当前元素所在位置]=0;* 5、如果当前栈不为空,则while循环,...原创 2022-08-25 20:38:12 · 352 阅读 · 0 评论 -
双指针法-滑动窗口策略
内容来自:《labuladong的算法小抄》一,什么是滑动窗口:滑动窗口其实思路非常简单,就是维护一个窗口,不断滑动,然后更新答案。· 二,举例:最小覆盖子串:力扣https://leetcode.cn/problems/minimum-window-substring/76. 最小覆盖子串难度困难1890给你一个字符串s、一个字符串t。返回s中涵盖t所有字符的最小子串。如果s中不存在涵盖t所有字符的子串,则返回空字符...原创 2022-05-23 20:01:22 · 839 阅读 · 0 评论 -
快慢指针问题
一,题目:力扣https://leetcode.cn/problems/linked-list-cycle/141. 环形链表难度简单1498给你一个链表的头节点head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos不作为参数进行传递。仅仅是为了标识链表的实际情况。如果链表中存在环,则返回true...原创 2022-05-21 23:08:09 · 182 阅读 · 0 评论 -
全排列问题:回溯法
回溯法的注意点:1,递归调用之后,即递归方法的下一行,一定要进行回溯一级!2,递归触底之后,也是一定要回溯一级!·题目案例:给你一个数字n,请你生成并返回所有 从 1 到 n 可能的全排列 。你可以 按任意顺序 返回答案。比如:输入:n = 3输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]·思路:把从1~n的每个数字,抽象成一个以该元素为根节点的多叉树,以n为4举例,如图:这是以1为根节点的多叉原创 2022-05-07 16:31:12 · 2026 阅读 · 0 评论 -
判断一个二叉树是否是平衡二叉树
题目:题目链接:力扣https://leetcode-cn.com/problems/balanced-binary-tree/110. 平衡二叉树难度简单991给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1 。示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3.原创 2022-04-30 16:03:46 · 4739 阅读 · 0 评论 -
计算二叉树的某个节点的高度
参考链接:力扣https://leetcode-cn.com/problems/balanced-binary-tree/solution/ping-heng-er-cha-shu-by-leetcode-solution/·公式:定义函数 height,用于计算二叉树中的任意一个节点 p 的高度:只能先递归向下,然后回溯,回溯时累加求出高度;公式就是:当前node节点的高度=【(node节点的左子树的高度)VS (node节点的右子树的高度)...原创 2022-04-30 15:35:10 · 3346 阅读 · 1 评论 -
如何从二叉搜索树中查找某个节点、以及记录查找路径
一,题目:题目链接:力扣https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-search-tree/235. 二叉搜索树的最近公共祖先难度简单825收藏分享切换为英文接收动态反馈给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也原创 2022-04-30 11:06:16 · 3079 阅读 · 0 评论 -
全排列【46. 全排列】
一,题目描述力扣46. 全排列难度中等1767给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以按任意顺序返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]]提示:1 <=...原创 2022-02-16 13:18:28 · 999 阅读 · 0 评论 -
合并二叉树
一,题目:给你两棵二叉树: root1 和 root2 。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。返回合并后的二叉树。注意: 合并过程必须从两个树的根节点开始。示例 1:输入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,n原创 2022-01-29 21:51:59 · 975 阅读 · 0 评论 -
剑指 Offer 42. 连续子数组的最大和
一,题目描述:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。提示:1 <=arr.length <= 10^5-100 <= arr[i] <= 100注意:本题与主站 53 题相同:https://leetcode-cn....原创 2022-01-15 12:24:40 · 81 阅读 · 0 评论 -
斐波那契数列_3种解法
题目描述:剑指 Offer 10- I. 斐波那契数列难度简单282写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项(即F(N))。斐波那契数列的定义如下:F(0) = 0, F(1)= 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。...原创 2022-01-11 10:40:05 · 651 阅读 · 0 评论 -
力扣题目_第 N 个泰波那契数
一,题目描述原文链接:力扣1137. 第 N 个泰波那契数难度简单160泰波那契序列Tn定义如下:T0= 0, T1= 1, T2= 1, 且在 n >= 0的条件下 Tn+3= Tn+ Tn+1+ Tn+2给你整数n,请返回第 n 个泰波那契数Tn的值。示例 1:输入:n = 4输出:4解释:T_3 = 0 + 1 + 1 = 2T_4 = 1 + 1 + 2 = 4示例 2:输入:n = 25输出:138953...原创 2022-01-05 21:45:22 · 460 阅读 · 0 评论 -
除数博弈_力扣题目_动态规划求解
一,题目描述原文链接:力扣1025. 除数博弈难度简单338爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。最初,黑板上有一个数字N。在每个玩家的回合,玩家需要执行以下操作:选出任一x,满足0 < x < N且N % x == 0。 用N - x替换黑板上的数字N。如果玩家无法执行这些操作,就会输掉游戏。只有在爱丽丝在游戏中取得胜利时才返回True,否则返回False。假设两个玩家都以最佳状态参与游戏。示例 1:输入...原创 2022-01-05 20:23:38 · 2628 阅读 · 0 评论 -
只出现一次的数字
题目链接:力扣题目描述:只出现一次的数字难度简单2130给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4通过次数544,988提交次数757,853二,代码与思想:package zyh.example....原创 2021-12-01 21:57:12 · 108 阅读 · 0 评论 -
使用最小花费爬楼梯
一,题目描述原文链接:力扣https://leetcode-cn.com/problems/min-cost-climbing-stairs/746. 使用最小花费爬楼梯难度简单709数组的每个下标作为一个阶梯,第i个阶梯对应着一个非负数的体力花费值cost[i](下标从0开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作...原创 2021-11-16 11:40:15 · 113 阅读 · 0 评论 -
力扣每日算法题_best-time-to-buy-and-sell-stock
一,题目描述;原文链接:力扣121. 买卖股票的最佳时机难度简单1920给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回0。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入...原创 2021-11-10 17:31:13 · 114 阅读 · 0 评论 -
判断子序列_力扣
一,题目描述392. 判断子序列难度简单543给定字符串s和t,判断s是否为t的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。进阶:如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?致谢:特别感谢@pbrother...原创 2021-11-15 15:11:01 · 121 阅读 · 0 评论 -
比特位计数_力扣
一,题目描述原文链接:力扣338. 比特位计数难度简单840给你一个整数n,对于0 <= i <= n中的每个i,计算其二进制表示中1的个数,返回一个长度为n + 1的数组ans作为答案。示例 1:输入:n = 2输出:[0,1,1]解释:0 --> 01 --> 12 --> 10示例 2:输入:n = 5输出:[0,1,1,2,1,2]解释:0 --> 01 --> 1...原创 2021-11-15 10:58:40 · 146 阅读 · 0 评论 -
杨辉三角Ⅱ-力扣
一,题目描述原文链接:力扣119. 杨辉三角 II难度简单332给定一个非负索引rowIndex,返回「杨辉三角」的第rowIndex行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例 1:输入: rowIndex = 3输出: [1,3,3,1]示例 2:输入: rowIndex = 0输出: [1]示例 3:输入: rowIndex = 1输出: [1,1]提示:0 <= rowIndex &l...原创 2021-11-11 10:24:41 · 163 阅读 · 0 评论 -
杨辉三角-力扣
一,题目描述原文链接:力扣https://leetcode-cn.com/problems/pascals-triangle/118. 杨辉三角难度简单623给定一个非负整数numRows,生成「杨辉三角」的前numRows行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例 1:输入: numRows = 5输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例2:输入: numRows = ...原创 2021-11-11 09:37:22 · 199 阅读 · 0 评论 -
二叉树的最大深度
一,题目描述:原文链接:力扣104. 二叉树的最大深度难度简单1017给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。通过次数541,468提交次数706,495二,解题思想:计算每个节点到叶子节...原创 2021-11-09 23:07:01 · 146 阅读 · 0 评论 -
对称二叉树
一,题目描述:原文链接:力扣101. 对称二叉树难度简单1599给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[1,2,2,3,4,4,3]是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个[1,2,2,null,3,null,3]则不是镜像对称的: 1 / \ 2 2 \ \ 3 3进阶:你可以运用递归和迭代两种方法解决这个问题吗?...原创 2021-11-09 13:19:36 · 176 阅读 · 0 评论 -
爬楼梯-ClimbingStairs
题目描述:70. 爬楼梯难度简单1975假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶通过次...原创 2021-11-04 20:26:38 · 482 阅读 · 0 评论 -
最大子序和
题目描述:53. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1示例 5:输入:nums = [-100000.原创 2021-11-04 16:32:31 · 1283 阅读 · 0 评论 -
递增顺序搜索树
题目描述:897. 递增顺序搜索树难度简单244给你一棵二叉搜索树,请你按中序遍历将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。示例 1:输入:root = [5,3,6,2,4,null,8,1,null,null,null,7,9]输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]示例 2:输入:root = [..原创 2021-10-14 16:17:21 · 328 阅读 · 0 评论 -
N叉树的前序遍历
题目描述:589. N 叉树的前序遍历给定一个 N 叉树,返回其节点值的前序遍历。N 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值null分隔(请参见示例)。进阶:递归法很简单,你可以使用迭代法完成此题吗?给定一个 N 叉树,返回其节点值的 前序遍历 。N 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。进阶:递归法很简单,你可以使用迭代法完成此题吗?示例 1:输入:root = [...原创 2021-10-09 12:57:32 · 711 阅读 · 0 评论 -
下一个更大元素
题目描述:496. 下一个更大元素 I难度简单496给你两个没有重复元素的数组nums1和nums2,其中nums1是nums2的子集。请你找出nums1中每个元素在nums2中的下一个比其大的值。nums1中数字x的下一个更大元素是指x在nums2中对应位置的右边的第一个比x大的元素。如果不存在,对应位置输出-1。示例 1:输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,...原创 2021-10-08 16:42:48 · 119 阅读 · 0 评论 -
回文链表_使用栈数据结构来解决
题目描述:234. 回文链表难度简单1137给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。力扣示例 1:输入:head = [1,2,2,1]输出:true示例 2:输入:head = [1,2]输出:false提示:链表中节点数目在范围[1, 105]内 0 <= Node.val <= 9进阶:你能否用O(n)时间复杂度和O(...原创 2021-10-03 22:30:02 · 391 阅读 · 0 评论 -
用两个栈实现队列
题目描述:剑指 Offer 09. 用两个栈实现队列难度简单318用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例...原创 2021-10-03 16:37:17 · 181 阅读 · 0 评论 -
用队列实现栈
问题描述:225. 用队列实现栈难度简单385请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop和empty)。实现MyStack类:void push(int x)将元素 x 压入栈顶。 int pop()移除并返回栈顶元素。 int top()返回栈顶元素。 boolean empty()如果栈是空的,返回true;否则,返回false。注意:你只能使用队列的基本操作 —— 也就是pus...原创 2021-10-03 11:21:49 · 157 阅读 · 0 评论 -
最小栈_辅助栈存储最小元素
155. 最小栈难度简单1041设计一个支持push,pop,top操作,并能在常数时间内检索到最小元素的栈。push(x)—— 将元素 x 推入栈中。 pop()—— 删除栈顶的元素。 top()—— 获取栈顶元素。 getMin()—— 检索栈中的最小元素。示例:输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]...原创 2021-10-02 22:04:11 · 208 阅读 · 0 评论 -
二叉树的中序遍历
力扣https://leetcode-cn.com/problems/binary-tree-inorder-traversal/给定一个二叉树的根节点root,返回它的中序遍历。输入:root = [1,null,2,3]输出:[1,3,2]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]输入:root = [1,2]输出:[2,1]输入:root = [1,null,2]输出:[1,2]代码示例:...原创 2021-09-24 16:20:41 · 248 阅读 · 0 评论 -
栈的使用——《有效的括号》
题目链接:力扣https://leetcode-cn.com/problems/valid-parentheses/solution/you-xiao-de-gua-hao-by-leetcode-solution/一, 规律与思想:1,从左往右,遇到的第一个右括号,一定是和它紧挨左边的那个左括号是一对的,否则就是false;2,先进后出的规律:先出现的左括号后匹配,后出现的左括号先匹配;这就是先进后出的模式,那么可以使用栈这种数据结构来辅助完成操作;3,我们可以把左括...原创 2021-09-12 12:52:48 · 183 阅读 · 0 评论 -
整数反转-题目
7. 整数反转难度简单3046给你一个 32 位的有符号整数x,返回将x中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围[−231, 231− 1],就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0提示:...原创 2021-09-07 17:47:25 · 381 阅读 · 0 评论 -
罗马数字转整数
13. 罗马数字转整数罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX +...原创 2021-09-06 13:17:53 · 148 阅读 · 0 评论 -
删除有序数组中的重复项
https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/26. 删除有序数组中的重复项难度简单2102收藏分享切换为英文接收动态反馈给你一个有序数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意...原创 2021-07-02 15:04:51 · 321 阅读 · 0 评论 -
哪种连续子字符串更长
1869. 哪种连续子字符串更长难度简单8收藏分享切换为英文接收动态反馈给你一个二进制字符串s。如果字符串中由1组成的最长连续子字符串严格长于由0组成的最长连续子字符串,返回true;否则,返回false。例如,s = "110100010"中,由1组成的最长连续子字符串的长度是2,由0组成的最长连续子字符串的长度是3。注意,如果字符串中不存在0,此时认为由0组成的最长连续子字符串的长度是0。字符串中不存在1的情况也适用此规则...原创 2021-06-20 10:43:49 · 177 阅读 · 0 评论 -
斐波那契数列
2021-05-10学习视频:https://www.bilibili.com/video/BV1Zt411o7Rn?p=17什么是斐波那契数列:斐波那契数列是递归的典型应用;①,前两项数除外,都是1;②,从第三项起,每一个数都是它前两个数的和;比如:1 1 2 3 5 8 13 21 ...代码:package per.zhangyh.algorithm.data_structure.code;/** *@author:zhangyonghui; *@...原创 2021-05-10 08:02:57 · 289 阅读 · 0 评论 -
双向循环链表
2021-05-09学习视频:https://www.bilibili.com/video/BV1Zt411o7Rn?p=16思想:为当前节点追加一个节点:1,先找出该节点的下一个节点,存放起来;2,将新结点设置为当前节点的下一个节点,将当前节点设置为新结点的上一个节点;3,将步骤1的节点设置为新结点的下一个节点,将新结点设置为步骤1的节点的上一个节点;1,当只有一个节点的时候,该节点的上一个节点、下一个节点,都指向它自己;2,为当前节点-节点1,追加节点2..原创 2021-05-09 18:11:21 · 108 阅读 · 0 评论 -
单链表的追加、删除、插入
2021.05.03package per.zhangyh.algorithm.data_structure.code;/** *@author:zhangyonghui; *@date: 2021/5/3; 9:30 *@Describe:一个单链表的节点 */public class SingleListNode { private int data; //链表的数据; private SingleListNode nextNode; //模拟链表中的指..原创 2021-05-03 14:28:50 · 317 阅读 · 0 评论