- 博客(707)
- 收藏
- 关注
原创 LeetCode 860. 柠檬水找零 java题解
此时大家就发现 情况一,情况二,都是固定策略,都不用我们来做分析了,而唯一不确定的其实在情况三。因为美元10只能给账单20找零,而美元5可以给账单10和账单20找零,美元5更万能!而情况三逻辑也不复杂甚至感觉纯模拟就可以了,其实情况三这里是有贪心的。情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5。账单是20的情况,为什么要优先消耗一个10和一个5呢?情况二:账单是10,消耗一个5,增加一个10。情况一:账单是5,直接收下。
2025-03-25 21:18:33
132
原创 操作系统IO多路复用select,poll,epoll
文件描述符是一个非负整数,是进程用于标识打开文件或I/O 资源的。在 Linux 系统中,当进程通过系统调用,或时,内核会为其分配一个唯一的文件描述符,进程通过这个文件描述符来对相应的文件或资源进行读写、控制等。
2025-03-19 21:24:00
505
原创 LeetCode 134. 加油站 java题解
,但综合三个加油站的情况,总加油量是足够完成一圈行程的,实际上从第一个加油站出发就可以绕一圈。这表明虽然从第三个加油站出发单独看是无法开到下一个加油站的(因为。总的加油量大于等于总耗油量。大于等于0 就说明总加油量是够的?举个简单的例子,如果有三个加油站,
2025-03-19 21:08:28
265
原创 LeetCode 392. 判断子序列 java题解
这道题应该算是编辑距离的入门题目,因为从题意中我们也可以发现,只需要计算删除的情况,不用考虑增加和替换的情况。本题 如果删元素一定是字符串t,而 1143.最长公共子序列 是两个字符串都可以删元素。转化为最长公共子序列问题。求[lens][j]的公共子序列长度是否为lens。t中找到了一个字符在s中也出现了。相当于t要删除元素,继续匹配。
2025-03-18 16:57:30
167
原创 LeetCode 376. 摆动序列 java题解
只要不满足摆动条件,就不更新count和prediff从摆动子序列的定义角度:摆动子序列要求序列中的元素按照一定的规律交替出现上升和下降。当序列中只有一个元素时,它可以被看作是一个特殊的摆动子序列,虽然不存在真正意义上的上升或下降交替,但它本身可以作为摆动子序列的起始点或基础,具有唯一性和确定性,符合摆动子序列的最小单元概念,所以定义其摆动数为 1。
2025-03-10 16:35:06
300
原创 LeetCode 968. 监控二叉树 java题解
如果左右子节点中有一个状态为 2(安装了摄像头),那么当前节点状态为 1(被监控但无摄像头),因为有子节点的摄像头可以监控到当前节点。如果左右子节点都状态为 1(被监控但无摄像头),那么当前节点状态为 0(未被监控),因为子节点没有摄像头,无法监控到当前节点。如果左右子节点中有一个状态为 0(未被监控),那么当前节点必须安装摄像头(状态 2),因为要保证所有节点都被监控。在遍历完所有节点后,如果根节点的状态为 0(未被监控),则需要在根节点安装一个摄像头。状态 1:该节点被监控,但没有安装摄像头。
2025-03-10 15:02:05
128
原创 LeetCode 108. 将有序数组转换为二叉搜索树 java题解
【代码】LeetCode 108. 将有序数组转换为二叉搜索树 java题解。
2025-03-09 14:27:48
108
原创 LeetCode 669. 修剪二叉搜索树 java题解
我代码:没利用到树的性质,遍历了每一个节点。还有一种迭代法,没有写出来。参考代码:我进行了注释。
2025-03-06 14:00:47
194
原创 LeetCode 450. 删除二叉搜索树中的节点 java题解
此时,我们找到该节点右子树中的最左节点(该节点是右子树中值最小的节点,且大于该节点左子树中所有节点的值),将删除节点的左子树连接到这个最左节点的左子树上(因为最左节点的值大于左子树所有节点的值,符合 BST 特性),然后用删除节点的右子节点来替代删除节点的位置。第五种情况:左右孩子节点都不为空,则将删除节点的左子树头结点(左孩子)放到删除节点的右子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点。第四种情况:删除节点的右孩子为空,左孩子不为空,删除节点,左孩子补位,返回左孩子为根节点。
2025-03-05 21:08:05
516
原创 LeetCode 349. 两个数组的交集 java题解
使用哈希集合来解决。先将一个数组的元素存入哈希集合,然后遍历另一个数组,检查元素是否在哈希集合中,如果存在则将其加入结果集合,最后将结果集合转换为数组返回。
2025-02-28 19:51:35
209
原创 LeetCode 111. 二叉树的最小深度 java题解
/因为叶子结点需要左右孩子都为空,当前节点有右孩子,不符合叶子结点。//同理,当一个右子树为空,左不为空,这时并不是最低点。// 当一个左子树为空,右不为空,这时并不是最低点。注意,跟二叉树的最大深度求解完全不同。//节点左右都不为空,节点左右都为空。
2025-02-27 17:41:44
180
原创 LeetCode 209. 长度最小的子数组
滑动窗口,初始时left和right都指向第一个位置。如果和小,那么right右移。如果和大于等于,满足条件形成了子数组,left右移,缩小左边界,寻找新的结果。
2025-02-27 12:59:55
99
原创 LeetCode 583. 两个字符串的删除操作 java题解
dp数组中存储需要删除的字符个数。如果当前字符相同,不用删了,删除个数用上一个状态的。如果当前字符不同,要考虑3种情况:删第一个字符串的,删第二个字符串的,两个都删。用最长公共子序列的做法。先求出他两的最长公共子序列,这部分是要保留的。字符串中除了这部分的字符,其他字符都需要删除。你知道的,我只会做最长公共子序列。所以想到了这种歹毒的方法。下面是别人题解的方法。
2024-12-22 11:32:01
280
原创 LeetCode 718. 最长重复子数组 java题解
如果定义 dp[i][j]为 以下标i为结尾的A,和以下标j 为结尾的B,那么 第一行和第一列毕竟要进行初始化,如果nums1[i] 与 nums2[0] 相同的话,对应的 dp[i][0]就要初始为1, 因为此时最长重复子数组为1。nums2[j] 与 nums1[0]相同的话,同理。我就定义dp[i][j]为 以下标i为结尾的A,和以下标j 为结尾的B,最长重复子数组长度。dp数组为什么定义:以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]。
2024-12-13 13:06:25
308
原创 JUC:线程池
内部实现:它也是通过ThreadPoolExecutor实现的,将核心线程数设置为 0,最大线程数设置为Integer.MAX_VALUE,使用SynchronousQueue作为任务队列,使得任务不会被存储,而是直接由空闲线程或者新创建的线程来执行。这些队列的不同特性会影响线程池的行为,并且与线程池的调整策略相互配合。如果当前运行的线程数小于corePoolSize,线程池会创建一个新的线程来执行这个任务,即使有空闲线程能够执行新来的任务,也会继续创建,直到线程数达到corePoolSize。
2024-12-04 19:42:39
641
原创 JUC中的集合BlockingQueue的不同实现
BlockingQueue 是 Java 多线程的一个接口,它主要用于生产者 - 消费者模式。它是线程安全的,阻塞的,有界的。当队列满或者空的时候,插入或者提取操作会被阻塞。
2024-12-01 15:55:42
314
jsp+mysql实现手机销售信息管理系统的源码,JavaWeb数据库课程作业
2024-06-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人