leetcode
文章平均质量分 93
猿小羽
技术本身是不值钱的,只有和业务结合的技术才是值钱的!
技术是为了实现某个业务,进而通过业务赚钱!
展开
-
day30
day30剑指 Offer 11. 旋转数组的最小数字力扣题目链接题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为 1。注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋原创 2022-04-25 00:16:38 · 184 阅读 · 0 评论 -
day29
day29剑指 Offer 06. 从尾到头打印链表力扣题目链接题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000递归解法思路递推阶段: 每次传入 head.next ,以 head == null(即走过链表尾部节点)为递归终止条件,此时直接返回。回溯阶段: 层层回溯时,将当前节点值加入列表,即 list.add(hea原创 2022-04-22 12:13:04 · 161 阅读 · 0 评论 -
day27
day27剑指 Offer 09. 用两个栈实现队列力扣题目链接题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]原创 2022-04-20 21:31:54 · 511 阅读 · 0 评论 -
day26
day26剑指 Offer 03. 数组中重复的数字力扣题目链接题目找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3思路要求时间复杂度 O(N),空间复杂度 O(N)。因此不能使用排序的方法,也不能使用额外的标记数组。对于这种数组元素在 [原创 2022-04-19 00:28:52 · 126 阅读 · 0 评论 -
day25
day25739. 每日温度力扣题目链接题目给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指在第 i 天之后,才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。示例 1:输入: temperatures = [73,74,75,71,69,72,76,73]输出: [1,1,4,2,1,1,0,0]示例 2:输入原创 2022-04-17 23:00:40 · 841 阅读 · 0 评论 -
day24
day241035. 不相交的线力扣题目链接题目在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足:nums1[i] == nums2[j]且绘制的直线不与任何其他连线(非水平线)相交。请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。以这种方法绘制线条,并返回可以绘制的最大连线数。示例 1:输入:nums1 =原创 2022-04-15 22:23:38 · 413 阅读 · 0 评论 -
day23
day23309. 最佳买卖股票时机含冷冻期力扣题目链接题目给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: prices = [1,2,3,0,2]原创 2022-04-11 23:52:18 · 227 阅读 · 0 评论 -
day22
day22139. 单词拆分力扣题目链接题目给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。示例 2:输入: s =原创 2022-04-10 23:05:16 · 228 阅读 · 0 评论 -
day21
day21474. 一和零力扣题目链接题目给你一个二进制字符串数组 strs 和两个整数 m 和 n 。请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。示例 1:输入:strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3输出:4解释:最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001"原创 2022-04-07 22:37:28 · 332 阅读 · 0 评论 -
day20
day2001背包理论基础初始化后的dp数组dp数组的取值都是从两个方向递推过来的先遍历物品再遍历背包先遍历背包再遍历物品代码实现/** * dp[i][j]表示编号[0,i]之间的任意物品,任取放进容量为j的背包中的最大价值 * 不放物品i:dp[i-1][j] * i-1表示不放(跳过)这个物品,那么容量j就不会改变 * 放物品i:dp[i-1][j-weight[i]] + value[i] * dp[i-1][j-weight[i]原创 2022-04-06 21:24:24 · 284 阅读 · 0 评论 -
day19
day19968. 监控二叉树力扣题目链接题目给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。示例 1:输入:[0,0,null,0,0]输出:1解释:如图所示,一台摄像头足以监控所有节点。示例 2:输入:[0,0,null,0,null,0,null,null,0]输出:2解释:需要至少两个摄像头来监视树的所有节点。 上图显示了摄像头放置的有效位置之一。提示:原创 2022-04-03 12:18:46 · 455 阅读 · 0 评论 -
day16
day1693. 复原 IP 地址力扣题目链接题目有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s原创 2022-03-18 17:36:52 · 391 阅读 · 0 评论 -
day15
day1577. 组合力扣题目链接题目给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 1:输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]示例 2:输入:n = 1, k = 1输出:[[1]]提示:1原创 2022-03-17 16:57:31 · 382 阅读 · 0 评论 -
day14
day14235. 二叉搜索树的最近公共祖先力扣题目链接题目给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7原创 2022-03-15 11:21:36 · 431 阅读 · 0 评论 -
day13
day13617. 合并二叉树力扣题目链接题目给你两棵二叉树: root1 和 root2 。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。返回合并后的二叉树。注意: 合并过程必须从两个树的根节点开始。示例 1:输入:root1 = [1,3,2,5], root2 = [原创 2022-03-13 15:21:20 · 809 阅读 · 0 评论 -
day12
day12404. 左叶子之和力扣题目链接题目给定二叉树的根节点 root,返回所有左叶子之和。示例 1:输入: root = [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24示例 2:输入: root = [1]输出: 0提示:节点数在 [1, 1000] 范围内-1000 <= Node.val <= 1000递归解法思路原创 2022-03-11 17:35:32 · 746 阅读 · 1 评论 -
day10
day10515. 在每个树行中找最大值力扣题目链接题目给定一棵二叉树的根节点 root,请找出该二叉树中每一层的最大值。示例1:输入: root = [1,3,2,5,3,null,9]输出: [1,3,9]示例2:输入: root = [1,2,3]输出: [1,3]提示:二叉树的节点个数的范围是 [0,10^4]-2^31 <= Node.val <= 2^31 - 1思路层序遍历,取每一层的最大值代码实现/**原创 2022-03-10 16:00:43 · 1344 阅读 · 0 评论 -
day11
day11104. 二叉树的最大深度力扣题目链接题目给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。后序遍历 - 递归思路本题可以使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度。原创 2022-03-10 15:56:33 · 171 阅读 · 0 评论 -
day09
day09144. 二叉树的前序遍历力扣题目链接题目给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[1,2]示例 5:输入:root = [1,null,2]输出:[1,2]提示:树中节点数目在范围原创 2022-03-08 20:36:09 · 894 阅读 · 0 评论 -
day08
day08232. 用栈实现队列力扣题目链接题目请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop( ) 从队列的开头移除并返回元素int peek( ) 返回队列开头的元素boolean empty( ) 如果队列为空,返回 true ;否则,返回 false说明:你 只能 使用标准的栈操作 —— 也就是只有&nb原创 2022-03-07 10:26:35 · 172 阅读 · 0 评论 -
day07
day07206. 反转链表力扣题目链接题目给你单链表的头节点 head,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例 2:输入:head = [1,2]输出:[2,1]示例 3:输入:head = []输出:[]提示:链表中节点的数目范围是 [0, 5000]-5000 <= Node.val <= 5000思路首先定义一个cur指针,原创 2022-03-04 22:47:43 · 1089 阅读 · 0 评论 -
day06
day0627. 移除元素力扣题目链接题目给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的原创 2022-03-04 22:46:59 · 145 阅读 · 0 评论 -
day05
day05344. 反转字符串力扣题目链接题目编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。示例 1:输入:s = ["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2:输入:s = ["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"]原创 2022-03-04 22:46:20 · 120 阅读 · 0 评论 -
KMP算法详解
KMP算法详解什么是KMP说到KMP,先说一下KMP这个名字是怎么来的,为什么叫做KMP呢。因为是由这三位学者发明的:Knuth,Morris和Pratt,所以取了三位学者名字的首字母。所以叫做KMPKMP有什么用KMP主要应用在字符串匹配上。KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。所以如何记录已经匹配的文本内容,是KMP的重点,也是next数组肩负的重任。其实KMP的代码不好理解,一些同学甚至直接把KMP代码的模板原创 2022-02-13 13:09:02 · 2325 阅读 · 1 评论 -
day04
day041. 两数之和力扣题目链接题目给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9原创 2022-02-10 23:54:01 · 133 阅读 · 0 评论 -
day03
day03242. 有效的字母异位词力扣题目链接题目给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false提示:1 <= s.leng原创 2022-02-09 23:12:25 · 715 阅读 · 0 评论 -
day02
day02203. 移除链表元素力扣题目链接题目给你一个链表的头节点 head和一个整数 val,请你删除链表中所有满足 Node.val == va的节点,并返回 新的头节点。示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]示例 2:输入:head = [], val = 1输出:[]示例 3:输入:head = [7,7,7,7], val = 7输出:[]原创 2022-02-08 13:59:14 · 314 阅读 · 0 评论 -
day01
day01704. 二分查找力扣题目链接题目给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在原创 2022-02-07 22:52:47 · 624 阅读 · 0 评论 -
leetcode 二叉树
二叉树226. 翻转二叉树思路分析通过观察,我们发现只要把二叉树上的每一个节点的左右子节点进行交换,最后的结果就是完全翻转之后的二叉树。这道题目比较简单,关键思路在于我们发现翻转整棵树就是交换每个节点的左右子节点,于是我们把交换左右子节点的代码放在了前序遍历的位置。代码实现/** * https://leetcode-cn.com/problems/invert-binary-tree/ * * @author xiexu * @create 2022-01-28 3:32 PM.原创 2022-01-31 20:57:44 · 161 阅读 · 0 评论 -
手把手带你拆解 LFU 算法
手把手带你拆解 LFU 算法文章目录手把手带你拆解 LFU 算法概述[460. LFU 缓存](https://leetcode-cn.com/problems/lfu-cache/)思路分析代码框架LFU 核心逻辑完整代码实现概述从实现难度上来说,LFU 算法的难度大于 LRU 算法,因为 LRU 算法相当于把数据按照时间排序,这个需求借助链表很自然就能实现,你一直从链表尾部加入元素的话,越靠近尾部的元素就是新的数据,越靠近头部的元素就是旧的数据,我们进行缓存淘汰的时候只要简单地将头部的元素淘汰掉就原创 2022-01-28 14:40:36 · 203 阅读 · 0 评论 -
手把手带你拆解 LRU 算法
手把手带你拆解 LRU 算法文章目录手把手带你拆解 LRU 算法概述[146. LRU 缓存](https://leetcode-cn.com/problems/lru-cache/)LRU 算法设计代码实现完整实现代码Java 的内置类型 LinkedHashMap 来实现 LRU 算法概述LRU 算法就是一种缓存淘汰策略,原理不难,但是面试中写出没有 bug 的算法比较有技巧,需要对数据结构进行层层抽象和拆解,本文 labuladong 就给你写一手漂亮的代码。计算机的缓存容量有限,如果缓存满了原创 2022-01-28 14:36:22 · 1588 阅读 · 0 评论 -
leetcode 滑动窗口
滑动窗口文章目录 滑动窗口模板框架[76. 最小覆盖子串](https://leetcode-cn.com/problems/minimum-window-substring/)思路分析代码实现[567. 字符串的排列](https://leetcode-cn.com/problems/permutation-in-string/)思路分析代码实现[438. 找到字符串中所有字母异位词](https://leetcode-cn.com/problems/find-all-anagrams-in-a-st.原创 2022-01-28 14:31:26 · 959 阅读 · 0 评论 -
leetcode 队列 栈
队列/栈文章目录 队列/栈[232. 用栈实现队列](https://leetcode-cn.com/problems/implement-queue-using-stacks/)思路分析代码实现[225. 用队列实现栈](https://leetcode-cn.com/problems/implement-stack-using-queues/)思路分析代码实现[20. 有效的括号](https://leetcode-cn.com/problems/valid-parentheses/)思路分析代码实.原创 2022-01-28 14:24:58 · 7415 阅读 · 0 评论