LeetCode
咖啡不加冰和糖
有志者,事竟成
展开
-
剑指 Offer之 二叉树的镜像
题目描述:请完成一个函数,输入一个二叉树,该函数输出它的镜像。参考代码1:递归public void Mirror(TreeNode root) { if(root == null || (root.left == null && root.right == null))return; dfs(root); } public TreeNode dfs(TreeNode root){ if(root == null ||原创 2020-08-05 20:40:26 · 134 阅读 · 1 评论 -
剑指Offer之树的子结构
题目描述:输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。参考代码:public boolean isSubStructure(TreeNode A, TreeNode B) { return (A != null && B != null) && (recur(A, B) || isSubStructure(A.left, B) || isSubStructure(A.r原创 2020-06-25 02:20:05 · 77 阅读 · 0 评论 -
LeetCode之LRU缓存
题目描述:运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。参考代码:原创 2020-06-24 21:51:02 · 214 阅读 · 0 评论 -
LeetCode链表之 K 个一组翻转链表
题目:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。思路:3步:找到第k个结点--------翻转-------连接到链表中。从前往后遍历链表,当遇到第k个结点,进行翻转;然后再往后遍历k个结点,进行翻转,重复进行,由此可以用递归来实现。public ListNode reverseKGroup(ListNode head, int k) { if(hea原创 2020-05-15 13:19:27 · 356 阅读 · 0 评论 -
LeetCode之杨辉三角
题目:给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。思路:观察杨辉三角如下:11 11 2 11 3 3 11 4 6 4 1…可以看到:每一行的第一列为 1;当 i(行数) = j(列数) 时,对应位置数字为1;当 i > j 时,a[i][j] = a[i-1][j-1]+a[i-1][j]。这样我们可以用动态规划来解决问题。设...原创 2020-04-24 09:37:23 · 208 阅读 · 0 评论 -
LeetCode数组之将0移动到末尾
题目:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。2次循环设定2个指针 i 和 j,i在前,j在后:当 nums[i] != 0时,nums[j++] = nums[i];,遍历...原创 2020-04-21 00:32:21 · 994 阅读 · 0 评论 -
LeetCode之两两交换链表中的节点
题目:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.思路:可以用递归来交换2个相邻的结点,同时注意将交换后的结点合理的连接起来。也可以用迭代来解决问题,将结点两两交换,并合理连接。参考代码...原创 2020-04-17 10:33:55 · 151 阅读 · 0 评论 -
旋转链表前n个结点
关于旋转链表的前n个结点的代码,递归来实现的,自己用图来记录下。原创 2020-04-17 02:29:26 · 102 阅读 · 0 评论 -
LeetCode之分隔链表
题目:给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。原创 2020-04-16 13:28:50 · 241 阅读 · 0 评论 -
LeetCode之奇偶链表
题目:给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->...原创 2020-04-15 14:22:54 · 411 阅读 · 0 评论 -
LeetCode之二进制链表转整数
题目:请你返回该链表所表示数字的 十进制值 。给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。示例 1:输入:head = [1,0,1]输出:5解释:二进制数 (101) 转化为十进制数 (5)思路:从头遍历链表,每次将上次的结果值乘以 2 + 当前的链表值,当链表遍历里完成时,返回结果。关于x 2:每次指针往...原创 2020-04-15 10:12:07 · 161 阅读 · 0 评论 -
LeetCode之返回单向链表倒数第 k 个节点的值
题目:实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。示例:输入: 1->2->3->4->5 和 k = 2输出: 4说明:给定的 k 保证是有效的。思路:设置2个指针p和q都指向head,p先向前移动 k-1 个结点,接着,p,q一起移动,直到q.next = null,此时q指针所指的结点就是要找的结点。例如下图(将每个格子看成链...原创 2020-04-15 03:41:09 · 571 阅读 · 0 评论 -
LeetCode之回文链表判断
题目:编写一个函数,检查输入的链表是否是回文的。示例 1:输入: 1->2输出: false 示例 2:输入: 1->2->2->1输出: true 思路:先将链表分成2个部分,将第2部分反转,然后逐一比较2个部分对应位置的值,如果都相等,则返回true;否则,返回false。注意完成后要将链表恢复成原来的状态,即将第2部分反转的链表再次反转,然后将第...原创 2020-04-15 01:08:38 · 176 阅读 · 0 评论 -
LeetCode之移除重复节点
题目:示例1:输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3]示例2:输入:[1, 1, 1, 1, 2]输出:[1, 2]提示:链表长度在[0, 20000]范围内。链表元素在[0, 20000]范围内。进阶:如果不得使用临时缓冲区,该怎么解决?思路:从头到尾遍历链表:如果当前节点的值存在在hash表中,则删除当前结点;如果当前节点的值不在...原创 2020-04-15 00:35:48 · 209 阅读 · 0 评论 -
链表操作总结
整理一些关于链表的操作,供自己来进行复习。反转链表public ListNode resverse(ListNode head){ if(head == null || head.next == null)return head; ListNode pre = null; ListNode curr = head; ListNode nextNode = head....原创 2020-04-13 23:12:46 · 145 阅读 · 0 评论 -
LeetCode之反转链表
题目:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL迭代法:该题迭代法主要思想是从头到尾依次改变指针的方向。设置3个指针(java无指针,这里暂且称指针)pre,cur,nextNode,初始值如下图:开始循环修改指针,nextNode指针是...原创 2020-04-13 19:28:40 · 299 阅读 · 0 评论 -
LeetCode之相交链表
题目:编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。思路:设置2个指针p,q,p指向A链表的headA结点,q指向B链表的headB结点,开始遍历,p移动1步,q移动1步,p为空时,令p= headB;q为空时,令q=headA,这样,当p==q时,返回true,否则返回false。参考代码:public ListNode getIn...原创 2020-04-12 20:32:33 · 86 阅读 · 0 评论 -
LeetCode之移除链表元素
题目:删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5思路:分2种情况:1)如果头结点的val值等于所给的val值,应该删除头结点;2)如果找到的节点为val的值不是头结点,则又是另外一种情况:这两种情况分情况的话比较...原创 2020-04-12 18:53:41 · 308 阅读 · 0 评论 -
LeetCode之环形链表
题目:参考代码:原创 2020-04-12 12:30:29 · 112 阅读 · 0 评论 -
LeetCode之删除排序链表中的重复元素
题目:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3参考代码1:public static ListNode deleteDuplicates(ListNode head) { ...原创 2020-04-12 11:04:24 · 109 阅读 · 0 评论 -
LeetCode之合并两个有序链表
题目:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解题思路:定义3个指针p,q,rs,p指向l1,q指向l2,rs则指向p和q中val最小的那个,然后循环遍历,将val小的插入rs。代码参考: p...原创 2020-04-12 10:15:40 · 132 阅读 · 0 评论