![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法训练
文章平均质量分 70
奋斗的龙猫
努力让自己变强,未来才有更多选择,才有足够资本守护身边人。
展开
-
蓝桥杯--扩散
小蓝在一张无限大的特殊画布上作画。这张画布可以看成一个方格图,每个格子可以用一个二维的整数坐标表示。小蓝在画布上首先点了一下几个点:(0, 0), (2020, 11), (11, 14), (2000, 2000)。只有这几个格子上有黑色,其它位置都是白色的。每过一分钟,黑色就会扩散一点。具体的,如果一个格子里面是黑色,它就会扩散到上、下、左、右四个相邻的格子中,使得这四个格子也变成黑色(如果原来就是黑色,则还是黑色)。请问,经过 2020 分钟后,画布上有多少个格子是黑色的。首先,这一原创 2022-04-02 23:41:17 · 951 阅读 · 0 评论 -
二叉树练习
文章目录二叉树的所有路径验证二叉搜索树二叉树的最大深度平衡二叉树二叉树的所有路径给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点 是指没有子节点的节点。来源:https://leetcode-cn.com/problems/binary-tree-paths/这里主要考察的是二叉树的遍历。通过这个题目,我们可以运用二叉树的前序遍历来解决这个问题,每遍历到一个节点,就将这个节点添加到路径path中,如果这个节点是一个叶子节点,那么此时的路径表示的是根节原创 2021-09-28 13:45:50 · 201 阅读 · 0 评论 -
二分查找练习
文章目录寻找峰值寻找峰值峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设 nums[-1] = nums[n] = -∞ 。你必须实现时间复杂度为 O(log n) 的算法来解决此问题。示例 1:输入:nums = [1,2,3,1]输出:2解释:3 是峰值元素,你的函数应该返回其索引 2。示例 2:输入:nums = [1,2,1,3,5,6,4]输出:1原创 2021-09-15 10:50:15 · 202 阅读 · 0 评论 -
链表的练习
文章目录回文链表重排链表排序的循环链表回文链表给定一个链表的 头节点 head ,请判断其是否为回文链表。如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。示例 1:输入: head = [1,2,3,3,2,1]输出: true示例 2:输入: head = [1,2]输出: fasle提示:链表 L 的长度范围为 [1, 105]0 <= node.val <= 9进阶:能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?来源:力扣(L原创 2021-09-13 19:38:24 · 302 阅读 · 0 评论 -
字符串练习
文章目录字符串中的变位词字符串中所有变位词不含重复字符的最长子字符串字符串中的变位词给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。换句话说,第一个字符串的排列之一是第二个字符串的 子串 。示例 1:输入: s1 = “ab” s2 = “eidbaooo”输出: True解释: s2 包含 s1 的排列之一 (“ba”).示例 2:输入: s1= “ab” s2 = “eidboaoo”输出: False提示:1 <= s1.length原创 2021-09-12 16:57:50 · 223 阅读 · 0 评论 -
数组的练习
文章目录旋转图像找到所有数组中消失的数字旋转图像给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例 3:输入:matrix = [[1]]输出:[[1]]示例 4:输入:matrix = [[1,2],[3,4]]输出:[[3,1],[4,2]]提示:matrix.length == nmatrix[i].length == n1 &l原创 2021-09-09 13:41:15 · 173 阅读 · 0 评论 -
位运算练习
文章目录只出现一次的数字只出现一次的数字 II颠倒二进制位汉明距离只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4题目来源:https://leetcode-cn.com/problems/single-number/思路:由于这里的重复数字只出现了两次,原创 2021-09-04 17:27:23 · 488 阅读 · 0 评论 -
动态规划练习
文章目录基本动态规划:一维爬楼梯打家劫舍等差数列划分基本动态规划:二维最小路径和基本动态规划:一维爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/cli原创 2021-08-13 19:27:08 · 352 阅读 · 0 评论 -
深度优先搜索/广度优先搜索练习
文章目录最短的桥最短的桥在给定的二维二进制数组 A 中,存在两座岛。(岛是由四面相连的 1 形成的一个最大组。)现在,我们可以将 0 变为 1,以使两座岛连接起来,变成一座岛。返回必须翻转的 0 的最小数目。(可以保证答案至少是 1 。)示例 1:输入:A = [[0,1],[1,0]]输出:1示例 2:输入:A = [[0,1,0],[0,0,0],[0,0,1]]输出:2示例 3:输入:A = [[1,1,1,1,1],[1,0,0,0,1],[1,0,1,0,1],[1,0,0原创 2021-08-12 14:29:43 · 220 阅读 · 0 评论 -
排序的练习
文章目录数组中的第k个元素前k个高频元素根据字符出现频率排序数组中的第k个元素给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4提示:1 <= k <= nums.length <= 104-104 <= nu原创 2021-08-10 17:52:07 · 210 阅读 · 0 评论 -
LeetCode 判断是否互为字符重排及URL化练习
判定是否互为字符重排给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。示例 1:输入: s1 = “abc”, s2 = “bca”输出: true示例 2:输入: s1 = “abc”, s2 = “bad”输出: false说明:0 <= len(s1) <= 1000 <= len(s2) <= 100题目来源:https://leetcode-cn.com/problems/check-permut原创 2021-08-08 21:31:08 · 97 阅读 · 0 评论 -
二分查找练习
二分查找通常用于一个有序数组中。文章目录x的平方根在排序数组中查找元素的第一个和最后一个位置x的平方根实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。来源:力扣(LeetCode)链接:https://leetcode-cn.com/pr原创 2021-08-07 16:45:18 · 174 阅读 · 0 评论 -
双指针练习
文章目录三数之和最接近的三数之和三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]提示:0 <= nums.lengt原创 2021-08-04 16:02:35 · 99 阅读 · 0 评论 -
贪心算法练习
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。示例 1:输入:flowerbed = [1,0,0,0,1], n = 1输出:true示例 2:输入:flowerbed = [1,0,0,0,1],原创 2021-07-31 14:12:45 · 231 阅读 · 0 评论 -
LeetCode 每日温度
请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。示例 1:输入: temperatures = [73,74,75,71,69,72,76,73]输出: [1,1,4,2,1,1,0,0]示例 2:输入: temperatures = [30,40,50,60]输出: [1,1,1,0]示例 3:输入: temperatures = [30,60,90]输出: [1,1,0]提示:1 &原创 2021-07-29 09:55:59 · 360 阅读 · 0 评论 -
LeetCode 找到所有数组中消失的数字
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。示例 1:输入:nums = [4,3,2,7,8,2,3,1]输出:[5,6]示例 2:输入:nums = [1,1]输出:[2]提示:n == nums.length1 <= n <= 1051 <= nums[i] <= n进阶:你能在不使用额外空间且时间复杂度为 O(n)原创 2021-07-28 17:18:14 · 312 阅读 · 0 评论 -
LeetCode 二叉树中所有距离为K的节点
给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 K 。返回到目标结点 target 距离为 K 的所有结点的值的列表。 答案可以以任何顺序返回。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/all-nodes-distance-k-in-binary-tree提示:给定的树是非空的。树上的每个结点都具有唯一的值 0 <= node.val <= 500 。目标结点 target 是树上的原创 2021-07-28 07:48:11 · 702 阅读 · 0 评论 -
LeetCode 快乐数
编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 true ;不是,则返回 false 。示例 1:输入:19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1示例 2:输入:n =原创 2021-07-26 12:08:34 · 133 阅读 · 0 评论 -
LeetCode 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/move-zeroes方法一:利用队列利用队列,从而将数组中所有不为0的数压入到队列中,然后将数字置0,然后遍历队列的数,将队列的数字放到数组的前面.对应的代码原创 2021-07-20 21:21:51 · 176 阅读 · 1 评论 -
LeetCode 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”提示:1 <= s.length <= 1000s 仅由数字和英文字母(大写和/或小写)组成来源:力扣(LeetCode)链接:https://leetcode-cn.com/probl原创 2021-07-20 12:23:28 · 106 阅读 · 1 评论 -
LeetCode 组合总和
LeetCode 组合总和给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[[7],[2,2,3]]示例 2:输入:candidates = [2,3,5],原创 2021-07-18 23:17:59 · 230 阅读 · 1 评论 -
LeetCode 跳跃游戏
给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。原创 2021-07-18 13:36:24 · 214 阅读 · 2 评论 -
LeetCode 和为K的子数组
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subarray-sum-equals-k一开原创 2021-07-17 17:29:54 · 185 阅读 · 0 评论 -
LeetCode 二进制矩阵中的最短路径
给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。二进制矩阵中的 畅通路径 是一条从 左上角 单元格(即,(0, 0))到 右下角 单元格(即,(n - 1, n - 1))的路径,该路径同时满足下述要求:1、路径途经的所有单元格都的值都是 0 。2、路径中所有相邻的单元格应当在 8 个方向之一 上连通(即,相邻两单元之间彼此不同且共享一条边或者一个角)。畅通路径的长度 是该路径途经的单元格总数。提示:n == grid.原创 2021-07-14 23:08:19 · 425 阅读 · 0 评论 -
LeetCode 回文链表
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrome-linked-list起初遍历链表,获取链表的顺序字符串str,然后调用reverse方法,从而获取字符串的逆序reverseString,返回原创 2021-07-13 19:52:49 · 129 阅读 · 1 评论 -
LeetCode 排序链表
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。1、暴力方法,先将链表的值存放到一个数组中,然后对这个数组进行快速排序,然后只需要遍历这个数组,将对应的数组的值赋值给链表的节点即可。但是这样做的话需要开辟空间给数组。对应的代码:class Solution { public ListNode sortList(ListNode head) { ListNode cur = head; List<Integer> list =原创 2021-07-12 20:05:50 · 505 阅读 · 1 评论 -
LeetCode 省份数量
有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。返回矩阵中 省份 的数量。提示:1 <= n <=原创 2021-07-12 10:27:11 · 132 阅读 · 0 评论 -
LeetCode 盛最多水的容器
给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/container-with-most-water我们都知道,盛水的容器盛水的多少,取决于构成桶的木板中最小值,所以这里也是一样的原创 2021-07-11 17:49:15 · 83 阅读 · 0 评论 -
LeetCode 长度最小的子数组
d原创 2021-07-11 17:21:43 · 134 阅读 · 0 评论 -
LeetCode 乘积小于k的子数组
给定一个正整数数组 nums和整数 k 。请找出该数组内乘积小于 k 的连续的子数组的个数。示例 1:输入: nums = [10,5,2,6], k = 100输出: 8解释: 8个乘积小于100的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。需要注意的是 [10,5,2] 并不是乘积小于100的子数组。示例 2:输入: nums = [1,2,3], k = 0输出: 0提示:1 <= nums.leng原创 2021-07-11 16:49:17 · 263 阅读 · 2 评论 -
LeetCode:三数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]提示:0 <= nums.length <= 3000-105 <原创 2021-07-09 11:31:04 · 140 阅读 · 0 评论 -
LeetCode 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof原创 2021-06-13 10:13:40 · 595 阅读 · 0 评论 -
LeetCode 二叉树中的最大路径和
路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。示例 1:输入:root = [1,2,3]输出:6解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6示例二:输入:root = [-10,9,20,null,null,15,7]输出:原创 2021-06-08 22:00:48 · 301 阅读 · 0 评论 -
LeetCode 滑动窗口
给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1] -3 5 3 6 7 31 [3 -1 -3] 5 3 6 7 31 3 [-1 -3 5] 3 6 7 51 3 -1 [-3 5 3] 6原创 2021-06-08 11:08:06 · 87 阅读 · 0 评论 -
LeetCode 数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 1:输入: [7,5,6,4]输出: 5限制:0 <= 数组长度 <= 50000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof看到这一个题,很容易想到利用双层嵌套循环解决,但是提交之后发现超时。所以双层嵌套循环的思路是不可以用于解决这原创 2021-06-06 20:27:46 · 1280 阅读 · 5 评论 -
LeetCode n个骰子的点数
把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。示例 1:输入: 1输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]示例 2:输入: 2输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.11111,0.08原创 2021-06-06 15:10:40 · 212 阅读 · 0 评论 -
LeetCode 二叉搜素树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树:示例 1:输入: [1,6,3,2,5]输出: false示例 2:输入: [1,3,2,6,5]输出: true提示:数组长度 <= 1000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bia原创 2021-06-04 20:31:04 · 111 阅读 · 0 评论 -
LeetCode 序列化二叉树
请实现两个函数,分别用来序列化和反序列化二叉树。示例:你可以将以下二叉树:来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/xu-lie-hua-er-cha-shu-lcof序列化的操作:二叉树的层序遍历,需要利用到队列这个数据结构1、定义StringBuilder对象,用于字符串的拼接,通过观察序列化时返回的字符串模式,那么先将" [ “拼接到stringbuilder对象中1、将根节点压入到队列中2、当队列不为空的时候,那么就从队列原创 2021-06-04 18:23:39 · 303 阅读 · 0 评论 -
LeetCode 股票的最大利润
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 2:输入: [7,6,4,3,1]输出: 0解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。限制:0 <= 数组长度 <=原创 2021-06-04 17:31:34 · 522 阅读 · 0 评论 -
LeetCode二叉树中和为某一值得路径
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和 target = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[[5,4,11,2],[5,8,4,5]]来源:力扣(LeetCode)链接:http原创 2021-06-02 20:34:00 · 140 阅读 · 0 评论