- 博客(17)
- 收藏
- 关注
原创 leetcode:删除链表的倒数第 n 个结点
思想其实很简单:设置一个tail指针,再设置一个距离tail为n步的指针p,当tail指向尾部时,指针p就是倒数第n个节点,所以只需要一遍遍历指针。我这里记录的是prep不是p,方便删除p节点,伪头节点方便处理边界情况,假设head=[1],n=1的特殊情况,要引入1个头节点合适。
2024-04-22 17:46:09
125
原创 合并两个有序链表
由于两个链表都是有序的,使用伪节点dmn每次摘两个链表中较小的那一个挂到dmn后面,list指针向后移动一个。将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。输入:l1 = [1,2,4], l2 = [1,3,4]题解:list1,list2分别指向两个链表的链表头,输出:[1,1,2,3,4,4]
2024-04-20 21:50:34
178
原创 多线程编程,交替打印字符串
例如,当 n = 15,输出: 1, 2, fizz, 4, buzz, fizz, 7, 8, fizz, buzz, 11, fizz, 13, 14, fizzbuzz。线程C将调用 fizzbuzz() 来判断是否同时能被 3 和 5 整除,如果可以,则输出 fizzbuzz。线程A将调用 fizz() 来判断是否能被 3 整除,如果可以,则输出 fizz。线程B将调用 buzz() 来判断是否能被 5 整除,如果可以,则输出 buzz。如果这个数字可以被 3 整除,输出 “fizz”。
2024-04-20 16:07:36
271
原创 LeetCode无重复字符的最大字串---滑动窗口
使用set维护一个窗口(查找数据快),每次出现重复数据时,窗口向右移动直到该数据能插入,给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。每次插入数据时更新滑动窗口的maxsize。输入: s = “abcabcbb”无重复字符的最长子串。
2024-03-13 16:39:03
391
1
原创 Leetcode两数相加--链表
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。使用头插法创建result链表,增加add变量记录进位,判断各种情况即可。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:l1 = [2,4,3], l2 = [5,6,4]请你将两个数相加,并以相同形式返回一个表示和的链表。解释:342 + 465 = 807.输出:[7,0,8]
2024-03-13 15:18:33
353
1
原创 LeetCode234回文链表
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true;否则,返回 false。第三遍遍历,一一对比链表开头与mid后的元素。第二遍遍历转置从链表开头到中间位置的元素,输入:head = [1,2,2,1]时间复杂度O(n),空间复杂度O(1)(其实第一遍遍历应该可以和第二遍合并)输入:head = [1,2]第一遍遍历计算链表的size,
2023-12-27 22:31:50
519
1
原创 LeetCode104二叉树的最大深度
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。输入:root = [3,9,20,null,null,15,7]给定一个二叉树 root ,返回其最大深度。输入:root = [1,null,2]
2023-11-20 16:34:09
66
1
原创 LeetCode24. 两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。先设计一个头节点指向真的头节点,这样就不用头节点交换的处理特殊情况。交换node2,node3==将q插入p后面。输入:head = [1,2,3,4]输入:head = [1]输出:[2,1,4,3]输入:head = []更新完后p可以走两步。
2023-11-20 16:02:51
36
1
原创 LeetCode 160. 相交链表
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null。先对齐链表尾端,从短的链表的长度开始,一一比较。题目数据 保证 整个链式结构中不存在环。
2023-11-19 15:26:35
47
原创 LeetCode283. 移动零
因为末尾补了0,所以扫描到0时无法区分是本来就有的0(这种情况需要覆盖),还是之前补的0(这种情况表示前面所有的0已经覆盖掉了,算法结束)给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。所以需要两次遍历,第一遍数0的个数,第二次遍历时统计移动的0数等于总0数时算法终止。输入: nums = [0,1,0,3,12]一碰到0就把后边的元素往前覆盖,末位补0。输出: [1,3,12,0,0]输入: nums = [0]双指针left、right。
2023-11-19 15:01:28
24
原创 LeetCode142. 环形链表 II
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。给定一个链表的头节点 head ,返回链表开始入环的第一个节点。我们遍历链表中的每个节点,直接插入,插入不成功代表有环,否则直接返回。输入:head = [3,2,0,-4], pos = 1。解释:链表中有一个环,其尾部连接到第二个节点。解释:链表中有一个环,其尾部连接到第一个节点。输出:返回索引为 1 的链表节点。
2023-11-18 22:49:19
25
1
原创 LeetCode61 旋转链表
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。输入:head = [1,2,3,4,5], k = 2。输入:head = [0,1,2], k = 4。先变成一个循环链表,再从适当位置断开。输出:[4,5,1,2,3]输出:[2,0,1]
2023-11-18 13:38:04
27
1
原创 Leetcode11. 盛最多水的容器
给定一个长度为 n 的整数数组 height。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。输入:[1,8,6,2,5,4,8,3,7]输入:height = [1,1]返回容器可以储存的最大水量。
2023-11-17 21:49:37
23
1
原创 LeetCode92反转链表2
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right。插入right-left次,pre记录(0,left)之间不需要反转的结点,更新pre。使用flag=1标记没有前置结点(即left=0),直接在头部前插入,所以head值需要更新。输入:head = [1,2,3,4,5], left = 2, right = 4。输入:head = [5], left = 1, right = 1。输出:[1,4,3,2,5]
2023-11-15 19:10:11
20
原创 LeetCode206反转链表
h和t之间是已经反转之后的链表起始和结束节点,p是下一个待插入的结点。给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。输入:head = [1,2,3,4,5]每次取p插入到h之前,更新h,更新p。输入:head = [1,2]输出:[5,4,3,2,1]
2023-11-15 17:38:01
30
原创 (c++)手撕线程池ThreadPool
提示:这里可以添加本文要记录的大概内容:当我们有某项工作需要调用线程执行时,需要创建线程,工作完成后销毁线程,然而创建和销毁开销较大,这时引入了线程池。当有任务进来时存放在线程池的任务队列中存储。线程池中维护了一定的数量的活着的工作者线程,没有任务时保持阻塞状态,有任务时去任务然后执行。管理者线程负责管理线程池中线程数量,根据任务数量判断,线程太多了需要销毁一些,太少了需要创建。
2023-11-12 18:56:41
234
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人