Keshawn_lu's Blog

Keshawn_lu's Blog

Become a better myself.

Leetcode 234. 回文链表
题目简介:请判断一个链表是否为回文链表。 示例 1: 12输入: 1->2输出: false 示例 2: 12输入: 1->2->2->1输出: true 进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 思路: 找到中间结点(若长度为奇数,则返回第n/2 + 1个结点;若长度为偶数,则返回第n/2个结点) 切断前后两半,将后一半逆转 前后链表逐个进行比较,若最后前一半链表剩下的结点数不超过1,则说明为回文链表 代码如下:123456789101112131415161718192021222324252627282930313233343...
Leetcode 763. 划分字母区间
题目简介:字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。 示例 1: 123456输入:S = "ababcbacadefegdehijhklij"输出:[9,7,8]解释:划分结果为 "ababcbaca", "defegde", "hijhklij"。每个字母最多出现在一个片段中。像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分...
Leetcode 925. 长按键入
题目简介:你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。 你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。 示例 1: 123输入:name = "alex", typed = "aaleex"输出:true解释:'alex' 中的 'a' 和 'e' 被长按。 示例 2: 123输入:name = "saeed", type...
Leetcode 143. 重排链表
题目简介:给定一个单链表 L:L0→L1→…→L n-1→Ln ,将其重新排列后变为: L0→L n→L1→L n-1→L2→L n-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 1给定链表 1->2->3->4, 重新排列为 1->4->2->3. 示例 2: 1给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3. 思路:分成三步: 找到链表中点的前驱结点(快慢指针法) 将前后两部分链表断开,再将后一半链表逆转 将后一半逆转的链表并入前...
Leetcode 844. 比较含退格的字符串
题目简介:给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。 注意:如果对空文本输入退格字符,文本继续为空。 示例 1: 123输入:S = "ab#c", T = "ad#c"输出:true解释:S 和 T 都会变成 “ac”。 示例 2: 123输入:S = "ab##", T = "c#d#"输出:true解释:S 和 T 都会变成 “”。 示例 3: 123输入:S = "a##c", T = "#a#c...
Leetcode 19. 删除链表的倒数第N个节点
题目简介:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 123给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? 思路:首先定义一个快指针,让其先走n歩。然后快慢指针一起走,当quick == NULL时,慢指针所指向的结点便是要删除的结点。 在慢指针走的过程中,保存其前驱结点,用于删除结点。 tip: 注意删除的是第一个结点时的情况特判。 代码如下:1234567891...
Leetcode 977. 有序数组的平方
题目简介:给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。 示例 1: 12输入:[-4,-1,0,3,10]输出:[0,1,9,16,100] 示例 2: 12输入:[-7,-3,2,3,11]输出:[4,9,9,49,121] 提示: 1 <= A.length <= 10000 -10000 <= A[i] <= 10000 A 已按非递减顺序排序。 思路:双指针,每次将绝对值大的那一个数字的平方放至答案数组的最后面即可(即逆序放置)。 时间复杂度O(n)。 代码如下:1234567891011121314...
Leetcode 116. 填充每个节点的下一个右侧节点指针
题目简介:给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下: 123456struct Node { int val; Node *left; Node *right; Node *next;} 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有 next 指针都被设置为 NULL。 示例: 思路:直观点的方法就是层序遍历,每次记录这层的总结点数,依次遍历即可。 tip: 本题还有空间复杂度为o(1)的做法,先mark一下。 ...
Leetcode 1002. 查找常用字符
题目简介:给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。 你可以按任意顺序返回答案。 示例 1: 12输入:["bella","label","roller"]输出:["e","l","l"] 示例 2: 12输入:["cool","lock","cook&quo...
Leetcode 24. 两两交换链表中的节点
题目简介:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 12输入:head = [1,2,3,4]输出:[2,1,4,3] 示例 2: 12输入:head = []输出:[] 示例 3: 12输入:head = [1]输出:[1] 提示: 链表中节点的数目在范围 [0, 100] 内 0 <= Node.val <= 100 思路:使用递归,递归的终止条件为没有结点或只有一个结点。 在两两交换结点时,用 head 表示原始链表的头节点,用 newhead 表示新的链表的头节点。 ...
avatar
鸣蜩十九
Always
友链
CSDN BiliBili