自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 收藏
  • 关注

原创 第二题:数组模拟双链表

数组模拟双链表

2023-01-31 19:32:54 537 2

原创 第一题:数组模拟单链表(链式前向星)

数组模拟单链表,又称链式前向星,在图的存储方面有着很大的用处(邻接表存储法),打比赛过程中试用数组模拟链表可以有效的防止TLE

2023-01-31 19:08:48 579

原创 位运算(出现一次数字专题)

剑指offer中用到位运算的三道经典题目,出现一次数字的专题。

2022-07-03 00:13:50 297

原创 Acwing暑期每日一题(6月10日性感素数)

Acwing暑期每日一题(6月10日)

2022-06-10 21:17:51 235

原创 动态规划——子序列问题——连续?不连续?

动态规划——子序列问题——连续?不连续?子序列问题是动态规划的一个常考题型,本篇文章主要介绍 子序列(连续)和子序列(不连续)两个问题。连续和不连续指的是子序列是否是连续的,还是说中间是可以有间隔的子序列。一:子序列(不连续)300. 最长递增子序列分析:从题意我们可以读出该题想求的是不连续的递增子序列。解法:动态规划第一步:dp[i]的定义dp[i]表示i之前包括i的最长上升子序列的长度。第二步:状态转移方程位置 i 的最长升序子序列等于 j 从 0..

2022-03-03 21:09:50 5594

原创 动态规划——股票问题

动态规划专题——股票问题虽然前两题用贪心可以做,但是本篇文章全部使用动态规划来解决问题,比较具有体系。121. 买卖股票的最佳时机动规五部曲:第一步:确定dp数组(dp table)以及下标的含义dp[i][0] 表示第i天持有股票所得最多现金dp[i][1] 表示第i天不持有股票所得最多现金第二步:确定递推公式如果第i天持有股票即dp[i][0], 那么可以由两个状态推出来第i-1天就持有股票,那么就保持现状,所得现金就是昨天持有股票的所得现...

2022-03-02 21:58:25 2737 2

原创 力扣 540题 有序数组中的单一元素(史上最快中等题)

540. 有序数组中的单一元素给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。请你找出并返回只出现一次的那个数。你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。提示:1 <= nums.length <= 105 0 <= nums[i]<= 105解题思路:用0去做 与 运算,O(n)时间复杂度代码和提交结果如下:class Solution { public int .

2022-02-14 00:09:49 340

原创 单周赛 2022.2.13 题解汇总(美团专场)

T1 6004. 得到 0 的操作数给你两个 非负 整数 num1 和 num2 。每一步 操作 中,如果 num1 >= num2 ,你必须用 num1 减 num2 ;否则,你必须用 num2 减 num1 。例如,num1 = 5 且 num2 = 4 ,应该用num1 减 num2 ,因此,得到 num1 = 1 和 num2 = 4 。然而,如果 num1 = 4且 num2 = 5 ,一步操作后,得到 num1 = 4 和 num2 = 1 。返回使 num1 = 0 或 .

2022-02-13 23:23:52 497 1

原创 单周赛 2022.2.6 题解汇总

T16000. 对奇偶下标分别排序给你一个下标从 0 开始的整数数组 nums 。根据下述规则重排 nums 中的值:按 非递增 顺序排列 nums 奇数下标 上的所有值。举个例子,如果排序前 nums = [4,1,2,3] ,对奇数下标的值排序后变为 [4,3,2,1] 。奇数下标 1 和 3 的值按照非递增顺序重排。按 非递减 顺序排列 nums 偶数下标 上的所有值。举个例子,如果排序前 nums = [4,1,2,3] ,对偶数下标的值排序后变为 [2,1,4,3] 。偶数下标 0.

2022-02-06 21:22:11 982

原创 力扣 1763题 最长的美好子字符串(新年快乐)

1763. 最长的美好子字符串当一个字符串 s包含的每一种字母的大写和小写形式 同时出现在 s中,就称这个字符串s是 美好 字符串。比方说,"abABB"是美好字符串,因为'A' 和'a'同时出现了,且'B' 和'b'也同时出现了。然而,"abA"不是美好字符串因为'b'出现了,而'B'没有出现。给你一个字符串s,请你返回s最长的美好子字符串。如果有多个答案,请你返回最早出现的一个。如果不存在美好子字符串,请你返回一个空字符串。...

2022-02-01 00:41:30 1376

原创 单周赛 2022.1.30 题解汇总

T15993. 将找到的值乘以 2给你一个整数数组 nums ,另给你一个整数 original ,这是需要在 nums 中搜索的第一个数字。接下来,你需要按下述步骤操作:如果在 nums 中找到 original ,将 original乘以 2 ,得到新 original(即,令 original = 2 * original)。否则,停止这一过程。只要能在数组中找到新 original ,就对新 original 继续 重复 这一过程。返回 original 的 最终 值。...

2022-01-30 16:09:47 938

原创 二叉树——450. 删除二叉搜索树中的节点(递归+迭代)

450. 删除二叉搜索树中的节点给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。提示:节点数的范围[0, 104]. -105<= Node.val <= 105 节点值唯一 root是合法的二叉搜索树 -105<= key <= 1...

2022-01-30 00:02:04 677

原创 二叉树——98. 验证二叉搜索树(递归+迭代)

98. 验证二叉搜索树给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。提示:树中节点数目范围在[1, 104]内 -231<= Node.val <= 231- 1解题思路:二叉搜索树的特点在于 二叉搜索树通过中序遍历所遍历的节点的 val 值是单调递增的,所以我们可以将所给树经过中序...

2022-01-28 00:32:51 261

原创 力扣 2047题 句子中的有效单词数(每日一题)

2047. 句子中的有效单词数句子仅由小写字母('a' 到 'z')、数字('0' 到 '9')、连字符('-')、标点符号('!'、'.' 和 ',')以及空格(' ')组成。每个句子可以根据空格分解成 一个或者多个 token ,这些 token 之间由一个或者多个空格 ' ' 分隔。如果一个 token 同时满足下述条件,则认为这个 token 是一个有效单词:仅由小写字母、连字符或标点(不含数字)。至多一个 连字符 '-' 。如果存在,连字符两侧应当都存在小写字母("a-b" 是一个有

2022-01-27 01:07:05 448

原创 单周赛 2022.1.23 题解汇总补充(T4 基于陈述统计最多好人数)

2151. 基于陈述统计最多好人数游戏中存在两种角色:好人:该角色只说真话。坏人:该角色可能说真话,也可能说假话。给你一个下标从 0 开始的二维整数数组 statements ,大小为 n x n ,表示 n 个玩家对彼此角色的陈述。具体来说,statements[i][j] 可以是下述值之一:0 表示 i 的陈述认为 j 是 坏人 。1 表示 i 的陈述认为 j 是 好人 。2 表示 i 没有对 j 作出陈述。另外,玩家不会对自己进行陈述。形式上,对所有0 <= i <.

2022-01-26 20:54:22 314

原创 力扣 76题 最小覆盖子串(双指针 + 滑动窗口)

76. 最小覆盖子串给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。注意:对于t中重复字符,我们寻找的子字符串中该字符数量必须不少于t中该字符数量。 如果s中存在这样的子串,我们保证它是唯一的答案。提示:1 <= s.length, t.length <= 105 s和t由英文字母组成解题思路:双指针+滑动窗口滑动窗口的思想:用i...

2022-01-26 19:56:51 1000

原创 二叉树——572. 另一棵树的子树(递归+迭代)

572. 另一棵树的子树相同题型:100.相同的树 101.对称二叉树给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。提示:root 树上的节点数量范围是 [1, 2000] subRoot 树上的节点数量范围是 [1, 1000].

2022-01-25 00:39:05 684

原创 单周赛 2022.1.23 题解汇总

T15989. 元素计数给你一个整数数组 nums ,统计并返回在 nums 中同时具有一个严格较小元素和一个严格较大元素的元素数目。提示:1 <= nums.length <= 100 -105<= nums[i] <= 105解题思路:按照题意,我们只需要对题目数组进行排序,然后用数组元素的总个数减去最大以及最小元素的个数,即为所求答案。因为只有最大最小值是严格最大元素和严格最小元素不能够同时拥有的。代码和提交截图如下:class Solu...

2022-01-23 23:59:10 380

原创 力扣 1332题 删除回文子序列

1332. 删除回文子序列给你一个字符串 s,它仅由字母 'a' 和 'b' 组成。每一次删除操作都可以从 s 中删除一个回文 子序列。返回删除给定字符串中所有字符(字符串为空)的最小删除次数。「子序列」定义:如果一个字符串可以通过删除原字符串某些字符而不改变原字符顺序得到,那么这个字符串就是原字符串的一个子序列。「回文」定义:如果一个字符串向后和向前读是一致的,那么这个字符串就是一个回文。解题思路:直接他妈的空串返回 0 ,回文串返回 1 ,啥也不是返回 2 (先删除所有的 .

2022-01-22 00:27:36 914

原创 二叉树——257. 二叉树的所有路径(递归+迭代)

257. 二叉树的所有路径给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点 是指没有子节点的节点。解题之前,想先吐槽点别的,为什么这么简单一道题,我会写这么久?为什么很多题之前都写过,但是见到之后就不会写了?为什么不能沉下心去认真的干一件事情?答案只有一个,我是个废物,我压根不适合写代码,我为什么要学这个,或者说我到底会什么?24岁一事无成的废物。解题思路:递归+迭代递归就是之前的回溯,没什么好写的。只不过要知道是采用前序遍历..

2022-01-21 01:27:24 781

原创 二叉树——222.完全二叉树的节点个数(递归+迭代)

222. 完全二叉树的节点个数给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。提示:树中节点的数目范围是[0, 5 * 104] 0 <= Node.val <= 5 * 104 题目数据保证输入的树是完全二叉树解题思路:这个题解题思路可以分为两种...

2022-01-20 00:02:40 2306

原创 力扣539题 最小时间差

539. 最小时间差给定一个 24 小时制(小时:分钟 "HH:MM")的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。提示:2 <= timePoints.length <= 2 * 104 timePoints[i]格式为"HH:MM"解题思路:① 先将List中的每个字符串转换为一天中对应的分钟数 ② 对分钟数数组进行排序,然后挨个遍历数组中每两个相邻元素的差值,就能得出最小时间差(特别要注意,数组中第一个元素和最...

2022-01-18 22:36:51 507

原创 力扣 36题 有效的数独 438题 找到字符串中所有字母异位词

36. 有效的数独请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。(请参考示例图)注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。空白格用'.'表示。提示:1 <= s.length, p.length <= ...

2022-01-17 21:43:16 205

原创 力扣382题 链表随机节点

382. 链表随机节点给你一个单链表,随机选择链表的一个节点,并返回相应的节点值。每个节点 被选中的概率一样 。实现 Solution 类:Solution(ListNode head) 使用整数数组初始化对象。int getRandom() 从链表中随机选择一个节点并返回该节点的值。链表中所有节点被选中的概率相等。提示:链表中的节点数在范围[1, 104]内 -104<= Node.val <= 104 至多调用getRandom方法104...

2022-01-16 23:16:47 87

原创 单周赛 2022.1.16 题解汇总

T1 5980. 将字符串拆分为若干长度为 k 的组字符串 s 可以按下述步骤划分为若干长度为 k 的组:第一组由字符串中的前 k 个字符组成,第二组由接下来的 k 个字符串组成,依此类推。每个字符都能够成为 某一个 组的一部分。对于最后一组,如果字符串剩下的字符 不足 k 个,需使用字符 fill 来补全这一组字符。注意,在去除最后一个组的填充字符 fill(如果存在的话)并按顺序连接所有的组后,所得到的字符串应该是 s 。给你一个字符串 s ,以及每组的长度 k 和一个用于填充的字符 f

2022-01-16 22:57:04 2222

原创 二叉树——翻转二叉树、对称二叉树(递归+迭代)

226. 翻转二叉树翻转一棵二叉树。解题方法:递归 + 迭代递归我们可以通过遍历整棵二叉树然后调换每个节点的左右子树即可完成二叉树的翻转。在递归遍历中,只有前序和后序是可以实现翻转的,因为中序的调换顺序使用的是指针,会出现一棵子树调换两次的情况。前序遍历翻转递归代码如下:class Solution { public TreeNode invertTree(TreeNode root) { if(root == null){ re

2022-01-15 13:02:54 481

原创 二叉树——层序遍历(迭代+同考点题)

102. 二叉树的层序遍历给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。树中节点数目在范围[0, 2000]内 -1000 <= Node.val <= 1000解题思路:利用队列先进先出的特性,将二叉树的头节点入队列,然后一旦出队,则将其左右节点入队。直到队列为空。/** * Definition for a binary tree node. * public class TreeNode { * ...

2022-01-14 19:27:51 166

原创 二叉树——前序、中序、后序遍历(递归+迭代)

给你二叉树的根节点 root ,返回它节点值的 前序、中序、后序 遍历。对应的中序、后序结果分别为 [1,3,2] 和 [3,2,1]解题方法:①递归法、②各自为营的迭代法(每种都有自己的特点,不具有模板性)、③模板迭代①递归法前序:class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new Lin..

2022-01-13 21:29:48 267

原创 力扣334题 递增的三元子序列

334. 递增的三元子序列给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。解题思路:回溯、动态规划、贪心方法一:回溯(超时)这个题类似于之前做过的求数组的递增子序列(长度大于3)的情况,并且只需要返回true和false。代码和提交结果如..

2022-01-12 21:32:04 282

原创 回溯——棋盘问题——解数独

37. 解数独编写一个程序,通过填充空格来解决数独问题。数独的解法需 遵循如下规则:数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用'.'表示。提示:board.length == 9board[i].length == 9board[i][j] 是一位数字或者 '.'题目数据 保证 输入数独仅有一个解解题思路:暴力回溯...

2022-01-11 21:21:15 420

原创 回溯——棋盘问题——N皇后

51. N 皇后n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。解题思路:回溯我们可以将棋盘的 ‘行’看作回溯的横向for循环,棋盘的 ‘列’ 看作回溯的纵向递归,N皇后问题便可以转化成如下的树形结构。代码实现和提交结果如下:class So...

2022-01-11 00:00:46 767

原创 单周赛 2022.1.9 题解汇总

T15976. 检查是否每一行每一列都包含全部整数对一个大小为 n x n 的矩阵而言,如果其每一行和每一列都包含从 1 到 n 的 全部 整数(含 1 和 n),则认为该矩阵是一个 有效 矩阵。给你一个大小为 n x n 的整数矩阵 matrix ,请你判断矩阵是否为一个有效矩阵:如果是,返回 true ;否则,返回 false 。解题思路:可以使用 set 进行去重,但是 n 的大小最高是100,所以我们可以用数组来代替set进行去重操作,只需遍历每行每列没有重复数字即可,...

2022-01-09 20:25:13 362

原创 双周赛 2022.1.8 题解汇总

T15960. 将标题首字母大写给你一个字符串 title ,它由单个空格连接一个或多个单词组成,每个单词都只包含英文字母。请你按以下规则将每个单词的首字母 大写 :如果单词的长度为1或者2,所有字母变成小写。否则,将单词首字母大写,剩余字母变成小写。请你返回 大写后的title。解题思路:① 将字符串全部转成小写,然后用 " " 分割整个字符串得到字符串数组。 ② 遍历字符串数组,如果长度 <= 2,用S...

2022-01-09 19:06:21 241

原创 回溯——子集问题

78. 子集给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。解题思路:回溯与组合问题相比,组合问题收集的是抽象树结构的叶子节点,而自己问题则是需要收集所有节点。代码和提交结果如下:class Solution { public List<List<Integer>> subsets(int[] nums) { //回溯法.

2022-01-07 23:59:41 874

原创 回溯——分割字符串问题

题目一:131. 分割回文串给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。解法:回溯+剪枝递归用来纵向遍历,for循环用来横向遍历,切割线(就是图中的红线)切割到字符串的结尾位置,说明找到了一个切割方法。此时可以发现,切割问题的回溯搜索的过程和组合问题的回溯搜索的过程是差不多的。代码和提交结果如下:class Solution { public List<L.

2022-01-06 23:14:01 922

原创 力扣hot100 216题组合总和 III 打卡

216. 组合总和 III找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。示例 1:输入: k = 3, n = 7输出: [[1,2,4]]示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]解题思路:回溯+剪枝方法一:单纯的回溯,纯暴力,代码和提交结果如下:class Solution {.

2022-01-06 00:58:50 132

原创 力扣面试题 08.06. 汉诺塔问题

在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:(1) 每次只能移动一个盘子;(2) 盘子只能从柱子顶端滑出移到下一根柱子;(3) 盘子只能叠在比它大的盘子上。请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。你需要原地修改栈。示例1:输入:A = [2, 1, 0], B = [], C = []输出:C = [2, ..

2022-01-04 23:02:51 200

原创 力扣1185题 一周中的第几天

1185. 一周中的第几天给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。输入为三个整数:day、month 和year,分别表示日、月、年。您返回的结果必须是这几个值中的一个{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}。示例 1:输入:day = 31, month = 8, year = 2019输出:"Saturday"示例 2:输入:day..

2022-01-03 13:32:38 106

原创 力扣周赛 5967题检查是否所有 A 都在 B 之前 5969题摧毁小行星

5967. 检查是否所有 A 都在 B 之前给你一个 仅 由字符 'a' 和 'b' 组成的字符串s 。如果字符串中 每个 'a' 都出现在 每个 'b' 之前,返回 true ;否则,返回 false 。解题思路:如果想要所有a都出现在所有的b之前,那么我们将字符串转换成字符数组之后,对字符数组进行排序,排序后的结果和原字符数组相比肯定是不变的,如果有变化,则说明原字符串不是所有的a都出现在b之前。代码和提交结果如下:class Solution { public...

2022-01-02 19:31:02 576

原创 力扣2022题 将一维数组转变成二维数组

2022. 将一维数组转变成二维数组给你一个下标从 0 开始的一维整数数组 original 和两个整数 m 和 n 。你需要使用 original 中 所有 元素创建一个 m 行 n 列的二维数组。original 中下标从 0 到 n - 1 (都 包含 )的元素构成二维数组的第一行,下标从 n 到 2 * n - 1 (都 包含 )的元素构成二维数组的第二行,依此类推。请你根据上述过程返回一个 m x n 的二维数组。如果无法构成这样的二维数组,请你返回一个空的二维数组。..

2022-01-01 19:35:22 316

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除