- 博客(84)
- 收藏
- 关注
原创 java基本语法
文档注释:以 /** 开头,以 */ 结尾。多行注释:以 /* 开头,以 */ 结尾。总结:单行注释和文档注释比较常用。单行注释:// 我是注释。
2025-02-15 20:13:21
251
原创 java基础知识
Java SE (Standard Edition)是 Java 的基础版本,Java EE (Enterprise Edition)是 Java 的高级版本。3. 平台无关性:即所谓的“一次编写,到处运行” java 程序编译后生成的是字节码文件(.class),这些字节码文件可以在任何安装了 Java 虚拟机(JVM)的平台上运行。JVM使得Java程序具备跨平台性。1.简单易学:Java 的语法类似于 C 和 C++,但去掉了一些复杂容易引起错误的内容,例如指针,从而降低了学习和使用的难度。
2025-02-13 12:51:47
278
原创 leetcode200.岛屿数量
思路:遍历整个网格 grid: 遇到一个 '1' 时,就表示发现了一个新岛屿,nums_island 增加 1。同时通过广度优先搜索淹没整个岛屿(即将与当前 '1' 相连的所有 '1' 变为 '0'),以免重复计数。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。(水)组成的的二维网格,请你计算网格中岛屿的数量。此外,你可以假设该网格的四条边均被水包围。
2025-02-11 15:15:50
135
原创 leetcode208.实现Trie(前缀树)
是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。// 返回 False。// 返回 True。// 返回 True。// 返回 True。(发音类似 "try")或者说。思路:就是哈希表的简单应用。
2025-02-09 14:04:35
125
原创 leetcode207.课程表
思路:存储每个课程的前驱和后继课程,如果一个课程入度为0,则表示该课程能够成功修读,则修改其后继课程的入度(即该后继课程可以少考虑一门先修) 采用广度优先顺序不断修改,如果成功修读课程数== numCourses则返回true。总共有 2 门课程。学习课程 1 之前,你需要先完成课程 0;并且学习课程 0 之前,你还应先完成课程 1。总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。在选修某些课程之前需要一些先修课程。请你判断是否可能完成所有课程的学习?,表示如果要学习课程。
2025-02-08 09:45:46
212
原创 leetcode994.腐烂的橘子
/ sp.一开始就是所有橘子都被腐烂状态,则直接返回0;最后仍剩余橘子不会被腐烂,返回-1。左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发生在 4 个方向上。直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。// 解读一下该题的要求:返回所有橘子都被腐烂所需要的分钟数。因为 0 分钟时已经没有新鲜橘子了,所以答案就是 0。// 经典广度优先遍历问题。的新鲜橘子都会腐烂。思路:详细注解见代码。
2025-02-07 12:38:36
403
原创 leetcode1143.最长公共子序列·
是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。最长公共子序列是 "ace" ,它的长度为 3。最长公共子序列是 "abc" ,它的长度为 3。两个字符串没有公共子序列,返回 0。是这两个字符串所共同拥有的子序列。,返回这两个字符串的最长。
2025-02-07 09:54:21
263
原创 leetcode5.最长回文字串
2)不是i==j造成,则要看[i+1][j-1]字串是不是回文字串,是,则最长回文字串长度为j-i+1;1)i==j造成的相等,即就是一个元素"a" "b"这种,最长回文字串长度为1;dp[i][j]表示考虑区间范围[i,j]最长回文字串长度。1. i下标元素和j下标元素不等,最长回文字串长度为0;2. i下标元素和j下标元素相等————"aba" 同样是符合题意的答案。中最长的 回文子串。
2025-02-06 14:50:21
210
原创 leetcode64.最小路径和
请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。因为路径 1→3→1→1→1 的总和最小。每次只能向下或者向右移动一步。给定一个包含非负整数的。
2025-02-05 22:15:19
166
原创 leetcode62.不同路径
dp[i] [j] 表示到第 i 行 j 列格子有多少种走法,注意初始化第一行和第一列都是1种走法。递归公式思路为 —— 一个格子要么从左边来,要么从右边来,因此一个格子走法等于二者之和。网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右。3. 向下 -> 向右 -> 向下。
2025-02-05 10:54:50
442
原创 leetcode31.下一个排列
将后面大数与前面小数进行交换,交换尽可能发生在低位,因此从后往前遍历;确定“小数”,即升序对的前一个数;确定“大数”,即从后往前找第一个比小数大的数字;交换后将大数后面变为升序 因为升序是最小的 满足题目下一个排列增幅尽可能小。这道题就别想着用回溯全排列的思路了,空间复杂度不满足。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的。
2025-01-27 14:46:00
132
原创 leetcode75.颜色分类
对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。分别表示红色、白色和蓝色。必须在不使用库内置的 sort 函数的情况下解决这个问题。给定一个包含红色、白色和蓝色、共。统计0、1、2数量,然后给数组赋值。
2025-01-22 18:39:30
202
原创 leetcode169.多数元素
假设candidate为主要势力(存储多数元素),count 为candidate战斗力(多数元素和其他元素对抗后剩余个数);如果和candidate不是一伙的,则战斗力count--。由于非maj的人数比maj的人数少并且还会自相残杀,非maj们无法吧maj们全拉下来。因此最后的candidate就是多数元素。尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。你可以假设数组是非空的,并且给定的数组总是存在多数元素。,返回其中的多数元素。碎碎念:这竟然是简单题?
2025-01-22 16:15:38
374
原创 leetcode136.只出现一次的数字
除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。,也采用了计数排序思想。
2025-01-21 14:29:59
383
原创 leetcode215.数组中的第K个最大元素
采用计数排序思想,创建一个涵盖所有数字可能范围的数组temp,下标i即数字,temp[i]即i出现次数,从后遍历temp,遇到temp[i]=0跳过,遇到temp[i]!=0则k--,直到k===0则找到第k大元素;注意这里nums[i]数字对应到temp是nums[i]+10000,因为如果直接对应,不处理,出现负数无法直接对应到temp下标。请注意,你需要找的是数组排序后的第。你必须设计并实现时间复杂度为。个最大的元素,而不是第。
2025-01-21 13:43:00
771
原创 leetcode347.前k个高频元素
思路:使用map统计各个数字出现频率,用大小为k最小堆留下高频k个数字;时间复杂度满足进阶要求O(nlogk)<O(nlogn);注意堆始终堆存放的是元素值,但是要根据元素值出现频率排序,因此要自定义堆排序方法。标签:哈希表 优先级队列。,请你返回其中出现频率前。你所设计算法的时间复杂度。
2025-01-20 17:20:25
296
原创 leetcode763.划分字母区间
思路:遍历字符串,得到每个字母第一次和最后一次出现的下标位置。map<字母,[字母第一次出现位置,字母最后一次出现位置]>为保证题目“同一字母最多出现在一个片段中”,合并所有字母出现区间,即可得到最后的片段数。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是。返回一个表示每个字符串片段的长度的列表。标签:哈希表合并区间。
2025-01-20 13:58:10
259
原创 leetcode416.分割等和子集
如果数组和为奇数,则一定无法分割;如果为偶数,则转换为背包是否能装满问题,dp[j]表示容量j是否能凑成。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。数组可以分割成[1,5,5]和[11]。数组不能分割成两个元素和相等的子集。
2025-01-19 20:03:10
284
原创 leetcode152.乘积最大子数组
请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。测试用例的答案是一个。//dp[i]表示以nums[i]结尾的子数组的最大乘积。结果不能为2,因为[-2,-1]不是子数组。子数组[2,3]有最大乘积6。//注意这道题涉及到符号问题。
2025-01-19 15:15:37
252
原创 leetcode300.最长递增子序列
是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。思路:dp[i]表示以nums[i]结尾严格递增子序列最长长度,时间复杂度为O(最长递增子序列是[2,3,7,101],因此长度为4。,找到其中最长严格递增子序列的长度。
2025-01-18 17:44:39
510
原创 leetcode139.单词拆分
思路:这道题可以尝试用二维矩阵走一遍过程就理解了,dp[j]表示j及之前的部分能否凑成,dp[j]为true条件为i-j能凑成,且dp[i]为true。返回true因为"applepenapple"可以由"apple""pen""apple"拼接成。返回true因为"leetcode"可以由"leet"和"code"拼接成。不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。如果可以利用字典中出现的一个或多个单词拼接出。注意,你可以重复使用字典中的单词。
2025-01-18 14:44:28
419
原创 leetcode279.完全平方数
是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。几乎一毛一样,只不过这里物品重量要自己计算。的完全平方数的最少数量。
2025-01-16 19:17:22
399
原创 leetcode322.零钱兑换
思路:该题属于求装满背包所用最少物品件数,dp[j]含义为填满容量j最少物品件数,最后返回dp[amount]即可;初始化dp[0]=0,剩下为-1,表示相应背包容量无法由给定物品凑成;计算并返回可以凑成总金额所需的。如果没有任何一种硬币组合能组成总金额,返回。,表示不同面额的硬币;你可以认为每种硬币的数量是无限的。
2025-01-16 18:52:50
192
原创 leetcode198.打家劫舍
一个是确定动态数组含义,这里dp[i] 表示考虑前i所房子能偷窃到的最大金额;一个是确定递推公式,这里递归公式思路为:第i所房子可以偷(nums[i]+dp[i-2])或者不偷(dp[i-1])偷窃1号房屋 (金额 = 2), 偷窃3号房屋 (金额=9),接着偷窃5号房屋 (金额=1)。偷窃到的最高金额 = 2 + 9 + 1 = 12。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,偷窃1号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
2025-01-16 15:15:09
490
原创 leetcode118.杨辉三角
在「杨辉三角」中,每个数是它左上方和右上方的数的和。生成「杨辉三角」的前 numRows。给定一个非负整数 numRows。
2025-01-16 13:19:40
472
原创 leetcode79.单词搜索
思路:原始思路是四个方向回溯,注意一旦找到word后续不用再进行搜索,立刻停止;但往往面试官会要求做优化,因此优化算法为统计word和board次数,如果一个字母在word中出现了x次,在board中出现了y次,且y<x,则不用再进行查找,直接返回false。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
2025-01-11 17:56:40
325
原创 leetcode22.括号生成
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且。思路:重点在于往里面扩选的时候要保证生成的括号组合是有效的。
2025-01-11 12:53:25
233
原创 leetcode39.组合总和
2 和 3 可以形成一组候选,2 + 2 + 3 = 7。注意 2 可以使用多次。7 也是一个候选, 7 = 7。那道题有点像,注意点为为了防止结果重复,每次扩选为在本次数字及本次数字之后的,用index来控制。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为。,并以列表形式返回。中可以使数字和为目标数。
2025-01-09 16:13:00
487
原创 leetcode17.电话号码的字母组合
那道题有异曲同工之妙,也是利用index控制下次扩选的范围,唯一不同之处在于在终止条件处收集结果。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。的字符串,返回所有它能表示的字母组合。
2025-01-09 13:30:23
345
原创 leetcode78.子集
注意点2:ret加入到list,再修改ret也会导致list中元素改变,因此要添加深拷贝ret到list。注意点1:每次扩选的数字必须是在本次数字之后的,用index来控制。子集问题特别的一点是不在递归终止条件处收集结果。返回该数组所有可能的子集(幂集)。
2025-01-08 16:16:17
438
原创 leetcode739.每日温度
天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用。碎碎念:这道题必须用栈实现,常规暴力双层循环会超时。,表示每天的温度,返回一个数组。
2025-01-06 20:48:20
427
原创 leetcode394.字符串解码
思路:有两点需要注意:一是最后结果是放在栈里面的;二是取数字的时候需要注意。表示重复次数的数字可能是两位数或三位数,因此读取数字的时候也要进行一下拼接操作。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数。给定一个经过编码的字符串,返回它解码后的字符串。标签:String;,表示其中方括号内部的。
2025-01-06 20:15:52
300
原创 leetcode155.最小栈
思路:就是栈的几个相关常规操作,注意常数复杂度获取最小值用辅助栈,栈顶是最小元素。--> 返回 -3.minStack.getMin();--> 返回 -2.minStack.top();操作,并能在常数时间内检索到最小元素的栈。
2025-01-06 13:08:00
296
原创 leetcode236.二叉树的最近公共祖先
中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(思路:分别记录p和q祖先,确定一个节点是否加入到祖先列表的规则是 :如果该节点是target或者该节点左右子树包含target。节点 5 和节点 4 的最近公共祖先是节点 5。因为根据定义最近公共祖先节点可以为节点本身。给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。节点 5 和节点 1 的最近公共祖先是节点 3。
2024-12-18 13:30:49
382
原创 leetcode45.跳跃游戏II
跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。思路:用的是动态规划思想;dp[i]表示到达下标i元素最小跳跃次数。生成的测试用例一定可以到达。向前跳转的最大长度。处,你可以跳转到任意。
2024-12-17 18:32:14
322
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人