随笔分类 -  算法 / 力扣算法题

1
摘要:440. 字典序的第K小数字 在0~9的字典树(十叉树)上,首先计算以 cur 为前缀的小于等于n的节点个数有多少,即通过以 cur 为根找子树中小于等于 n 的节点个数 如果子树个数小于k,那么就在同一层向右平移1, 否则就跳到cur的一下层第一个子节点 点击查看代码 class Solution 阅读全文
posted @ 2024-09-05 12:09 沙汀鱼 阅读(9) 评论(0) 推荐(0) 编辑
摘要:LeetCode 84. 柱状图中最大的矩形 计算矩形面积需要三要素,高,左端点和右端点。 高的枚举可以直接枚举每个柱子的高度,那以每个柱子为高,矩形的左右端点如何确定? 单调栈维护柱子索引,保证柱子索引递增以及栈中索引对应的柱子高度也是递增的 那么柱子左端点显而易见就是栈中前一个元素,柱子的右端点 阅读全文
posted @ 2024-07-17 16:26 沙汀鱼 阅读(5) 评论(0) 推荐(0) 编辑
摘要:三种遍历都是用栈维护二叉树前序遍历节点顺序 前序遍历 模拟前序遍历即可,记录顺序和入栈顺序一致 class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> ans = new Array 阅读全文
posted @ 2024-04-20 23:04 沙汀鱼 阅读(10) 评论(0) 推荐(0) 编辑
摘要:105. 从前序与中序遍历序列构造二叉树 栈+迭代 规律 前序遍历中相邻节点u和v,v节点一定是u节点的左节点或者是其自身某个祖先的右节点 一个没有右节点的链,中序遍历是从叶子到根,前序遍历是从根到叶子 解题思路 用一个栈维护前序遍历的节点 用一个指针p指向中序遍历的第一个叶子节点 遍历前序,一直遍 阅读全文
posted @ 2024-04-20 17:40 沙汀鱼 阅读(35) 评论(0) 推荐(0) 编辑
摘要:215. 数组中的第K个最大元素 权值树状数组+二分 class Solution { int[] c; int up; public int findKthLargest(int[] nums, int k) { // 离散化 // 去重+排序 Set<Integer> set = new Tre 阅读全文
posted @ 2024-04-19 15:36 沙汀鱼 阅读(5) 评论(0) 推荐(0) 编辑
摘要:leetcode 25. K 个一组翻转链表 假设当前需要反转的子链表为[curHead, curTail] curDummy:当前需要反转的子链表的虚拟节点 curHead:当前需要反转的子链表的头节点 curTail:当前需要反转的子链表的尾节点 找到尾节点curTail 反转子链表[curHe 阅读全文
posted @ 2023-12-27 21:13 沙汀鱼 阅读(3) 评论(0) 推荐(0) 编辑
摘要:leetcode 148. 排序链表 自顶向下归并排序 用快慢指针找到序列中间位置 这里要注意一个细节:始终使fast指向链表尾节点的next节点(也就是null),这样slow指向后半段链表的起点,避免出现死循环。 前半段链表[head, slow),后半段[slow, fast) 合并两个排序链 阅读全文
posted @ 2023-12-27 15:02 沙汀鱼 阅读(54) 评论(0) 推荐(0) 编辑
摘要:leetcode 143. 重排链表 题意: 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln 请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值,而 阅读全文
posted @ 2023-12-19 12:44 沙汀鱼 阅读(26) 评论(0) 推荐(0) 编辑
摘要:leetcode 142. 环形链表 II 题意: 不可更改链表节点,给定链表表头,返回链表在环中的第一个节点,没有返回null 题解:哈希表集合 遍历一遍链表,哈希表集合维护链表节点,当访问到的当前节点已经在集合中,说明当前节点是所求节点 哈希表集合解代码 /** * Definition for 阅读全文
posted @ 2023-12-18 22:26 沙汀鱼 阅读(29) 评论(0) 推荐(0) 编辑
摘要:leetcode 92. 反转链表 II 题意:反转链表的[left, right],返回链表表头 题解:直接模拟删除的过程即可 定义重要节点 记录left位置的节点为lnode,right位置的节点为rnode lnode的前驱节点为pre,right位置的后继节点为suc 初始化pre = su 阅读全文
posted @ 2023-12-18 14:22 沙汀鱼 阅读(7) 评论(0) 推荐(0) 编辑
摘要:leetcode 82. 删除排序链表中的重复元素 II 题意:只要链表中元素x重复出现了,删除所有元素x(刚开始还读错题了……) 题解: 在表头前添加链表的虚拟节点dummy 遍历链表 (1)如果当前节点cur的下一个节点cur.next和cur.next.next相等,则意味着出现了重复元素,记 阅读全文
posted @ 2023-12-14 22:05 沙汀鱼 阅读(3) 评论(0) 推荐(0) 编辑
摘要:合并两个排序链表 模拟维护一个合并链表,每次添加两个排序链表中较小val的节点即可 模拟代码 public ListNode mergeTwo(ListNode a, ListNode b) { if(a == null) return b; if(b == null) return a; List 阅读全文
posted @ 2023-12-14 20:51 沙汀鱼 阅读(8) 评论(0) 推荐(0) 编辑
摘要:leetcode 19. 删除链表的倒数第 N 个结点 题解1:通过链表长度获取[倒数第n个节点]位置 计算链表长度 找到[倒数第N个节点]的前一个节点 删除[倒数第N个节点] 注意特殊情况:删除的是第一个节点时,直接返回第二个节点即可 点击查看代码 /** * Definition for sin 阅读全文
posted @ 2023-12-14 19:46 沙汀鱼 阅读(3) 评论(0) 推荐(0) 编辑
摘要:leetcode 2. 两数相加 题意:两个长度为[1, 100]的大数,分别倒序存储(个位在链表头)在两个链表中,计算两个数的和,并倒序存储在一个新链表,返回链表表头。数据中不存在前导零。 题解:模拟大数相加,注意维护进位carry即可 代码 /** * Definition for singly 阅读全文
posted @ 2023-12-14 17:19 沙汀鱼 阅读(8) 评论(0) 推荐(0) 编辑
摘要:leetcode 234. 回文链表 题意:判断一个链表是不是回文(中心对称)的 【反转链表】题解1: 得到原链表的反转链表,然后对比原链表与反转链表的内容是否一致即可。 反转链表版本代码 /** * Definition for singly-linked list. * public class 阅读全文
posted @ 2023-12-14 11:13 沙汀鱼 阅读(13) 评论(0) 推荐(0) 编辑
摘要:leetcode 206. 反转链表 题意:给定链表表头,反转链表,返回反转链表的表头 【循环】题解: head维护原链表当前节点,nHead维护反转链表的头节点,nHead置于head前一位,依次后移,直至head到链表尾结束。 双指针循环版本 /** * Definition for singl 阅读全文
posted @ 2023-12-13 21:11 沙汀鱼 阅读(11) 评论(0) 推荐(0) 编辑
摘要:leetcode 160. 相交链表 题意:给定两个链表A、B的表头节点,找到链表交叉节点(地址值相同)。链表A长度为m,链表B长度为n,范围在[1, 3e4] 题解1: 根据哈希表去重的原理,使用哈希表集合HashSet来维护链表节点,默认比较节点地址值。将链表A中的节点全部add进HashSet 阅读全文
posted @ 2023-12-13 13:27 沙汀鱼 阅读(10) 评论(0) 推荐(0) 编辑
摘要:leetcode 225. 用队列实现栈 题意:用一个队列实现栈 题解: (1)弹栈:将队头开始的前size()-1个元素全部出队然后重新入队,使队尾元素循环到队头,然后弹出 (2)获取栈顶元素:先将队头开始的前size()-1个元素全部出队然后重新入队,使队尾元素循环到队头,此时队头元素即为栈顶元 阅读全文
posted @ 2023-12-12 21:34 沙汀鱼 阅读(9) 评论(0) 推荐(0) 编辑
摘要:leetcode 232. 用栈实现队列 题意:双栈实现队列;要求每个入队、出队操作均摊O(1)复杂度 题解: 用一个栈in维护入队元素,另一个栈out维护出队元素 出队或取队头元素:首先判断栈out是否为空,如果为空,将栈in中的元素pop()到栈out中,那么栈out栈顶元素即为原队列队头元素。 阅读全文
posted @ 2023-12-12 21:20 沙汀鱼 阅读(17) 评论(0) 推荐(0) 编辑
摘要:leetcode 239. 滑动窗口最大值 题目描述: 1e5大小的nums[]数组中长度为k(1<=k<=1e5)的窗口的最大值 题解: 暴力求解O(n^2)会超时,需要O(nlogn)的解法 使用大根堆优先队列维护窗口元素,每次取最大值复杂度降为O(1),堆结构维护复杂度O(logn) 问:如果 阅读全文
posted @ 2023-12-12 21:06 沙汀鱼 阅读(46) 评论(0) 推荐(0) 编辑

1
点击右上角即可分享
微信分享提示