leetcode刷题
做一个体面人
努力做一个体面的人!!!
展开
-
腐烂的橘子BFS
【代码】腐烂的橘子BFS。原创 2024-05-13 10:28:00 · 177 阅读 · 1 评论 -
三数之和问题
【代码】三数之和问题。原创 2023-11-13 10:15:00 · 101 阅读 · 0 评论 -
两数之和问题
【代码】两数之和问题。原创 2023-11-12 00:49:55 · 257 阅读 · 0 评论 -
二叉搜索树的最近公共祖先
二插搜索树的最近公共祖先原创 2022-09-15 10:17:30 · 165 阅读 · 0 评论 -
二叉树路径总和
路径总和原创 2022-09-13 09:28:11 · 130 阅读 · 0 评论 -
二叉树的层序遍历
二叉树的层序遍历原创 2022-09-10 15:06:49 · 159 阅读 · 0 评论 -
链表相加(Java)
问题描述:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例说明:示例1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例2:输入:l1 = [0], l2 = [0]输出:[0]示例3:输入:l1 = [9,9,9,9,9,9,9], l原创 2022-03-07 00:00:00 · 222 阅读 · 0 评论 -
最长连续递增序列
问题描述:给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …, nums[r - 1], nums[r]] 就是连续递增子序列。输出示例:示例 1:输入:nums = [1,3,5,4,7]输出:3解释:最长连续递增序列是 [1,3,原创 2022-03-06 00:00:00 · 200 阅读 · 0 评论 -
删除有序数组中的重复项 II
题目描述:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。输出示例:示例 1:输入:nums = [1,1,1,2,2,3]输出:5, nums = [1,1,2,2,3]解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。 不需要考虑数组中超出新长度后面的元素。示例 2:原创 2022-03-05 13:15:00 · 241 阅读 · 0 评论 -
从中序与后序遍历序列构造二叉树
问题描述:给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。输出示例:示例1:输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]输出:[3,9,20,null,null,15,7]示例2:输入:inorder = [-1], postorder = [-1]输出:[-1]思想:利用分治的思想来解决该题结合原创 2022-02-28 13:47:44 · 169 阅读 · 0 评论 -
从前序与中序遍历序列构造二叉树
题目描述:给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。示例输出:输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]输出: [3,9,20,null,null,15,7]示例2:输入: preorder = [-1], inorder = [-1]输出: [-1]解题思路:思想:利用分治的思想来解决该题具原创 2022-03-02 00:15:00 · 470 阅读 · 0 评论 -
数字的分类
输入格式:每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N,随后给出 N 个不超过 1000 的待分类的正整数。数字间以空格分隔。输出格式:对给定的 N 个正整数,按题目要求计算 A1~A5并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。若分类之后某一类不存在数字,则在相应位置输出N。输入样例1:13 1 2 3 4 5 6 7 8 9 10 20 16 18输出样例1:30 11 2 9.7 9输入样例2:8 1 2 4 5 6 7 9 .原创 2022-03-01 00:15:00 · 245 阅读 · 0 评论 -
约瑟夫环-猴子选大王(变型题)
约瑟夫环-猴子选大王(变型题)接着上篇猴子选大王继续展开,上篇讲的是有m个猴子,从第一个猴子开始报数,当报到n时,第n个猴子出去,从n+1猴子开始,从1继续报数。这篇我们来说,从任意猴子k的位置开始报数,当报到n时,第n个猴子出去,从n+1猴子开始,从1继续报数问题描述:约瑟夫环运作如下: 1、一群猴子围在一起坐成环状(如:N) 2、从某个编号开始报数(如:K) 3、数到某个数(如:M)的时候,此猴出列,下一个猴子重新报数 4、一直循环,直到所有猴子出列原创 2022-02-28 08:00:00 · 624 阅读 · 0 评论 -
猴子选大王
猴子选大王题目描述:N个猴子围成一个圈1、从第一只猴子开始报数,第一只猴子报12、每个报2的猴子退出,然后从下一只猴子重新开始报数,3、要求输出退出的顺序和最后剩下的人解题思路:解法一:用数组解决,用数组存放1,2,3…N来表示N个猴子,然后不停的遍历数组,对于被选中的编号,我们可以将其标记为0,来表示该猴子已出局,然后按这种方法一直遍历数组,直到数组只有一个非0元素时,就表示已经找出最后一个猴子。解法二:利用环形链表解决,这也是大多数人看到这个题第一个想出的方法,毕竟操作简单,易实现。它的原创 2022-02-27 08:45:00 · 574 阅读 · 0 评论 -
顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]解题思路:可以将矩阵看成若干层,首先打印最外层的元素,其次打印次外层的元素,直到打印最内层的元素。定义矩阵的第 kk 层是到最近边原创 2022-02-26 08:30:00 · 154 阅读 · 0 评论 -
平方对称数
判断一个非负整数n(n<256)是否是平方对称数问题描述:11的平方是121 ,则是11是平方对称数。输出“yes”,否则输出“no”解题思路:简单来说就是对称,用双指针也行,用模和除法也行;public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int tmp = n; int pow =原创 2022-02-25 15:15:00 · 137 阅读 · 0 评论 -
字符串压缩
题目描述:输入一个字符串S1,对输入的字符进行压缩,如果不能压缩则原封不动。例如:输入:S1: aaabbcddddde输出:S2:3a2bc5de解题思路:定义Stringbuffer,用来记录结果,定义数组arr,用来表示每个字符出现的次数,在根据字符顺序遍历数组,当arr[i] = 0时,表示字符串中没有出现该字符,直接跳过;当arr[i] = 1时,表示该字符只出现一次,直接添加到StringBuffer中;当arr[i] > 1时,表示该字符出现了n次,那么就要把n和当前字符添加到S原创 2022-02-24 11:30:00 · 277 阅读 · 0 评论 -
大数相加(Java)
题目描述:给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。条件:至少有一个字符串长度大于10小于100,如10 <= num1.length() <= 100解题思路:本题我们只需要对两个大整数模拟「竖式加法」的过程。竖式加法就是我们平常学习生活中常用的对两个整数相加的方法,回想一下我们在纸上对两个整数相加的操作,是不是如下图将相同数原创 2022-02-23 12:15:00 · 1976 阅读 · 0 评论 -
复杂链表复制
题目描述:请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。及 解题思路: 1. 使用哈希表,存储每个结点复制后的新结点; 2. 在得到新结点与旧结点的映射关系后,通过某种方式 将新结点按照旧结点 的关系进行连线。 3. 连线方式:遍历到原始链表的当前结点cur, 从 mp 中取出 cur 结点映射 的结点 n原创 2022-02-09 16:45:00 · 127 阅读 · 0 评论 -
反转链表-循环+递归
题目描述:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。解决方法1:双指针+循环定义cur结点,用来指向当前结点的下一个结点。定义pre结点,用来作为新的链表的下一个结点。class Solution { public ListNode reverseList(ListNode head) { if(head == null) return head; ListNode pre = null; while(head !原创 2022-02-08 22:15:00 · 431 阅读 · 0 评论 -
包含min函数的栈
包含min函数的栈问题描述:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。解题思路:定义两栈stack1和stack2,stack1用来入栈,stack2只负责输出栈里最小数。 public void push(int x) { /** 直接入stack1,然后再判断stack2是否为空,或者stack2的栈顶元素 大于等于x,如果条件满足,则x也入sta原创 2022-02-07 18:17:00 · 487 阅读 · 0 评论 -
两个栈实现一个队列
两个栈实现一个队列题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )解题思路:自定义两栈stack1和stack2,stack1负责入队,stack2负责出队。1、如果stack2不为空,直接出队。2、第一步不成立,那么看stack1是否为空,如果为空,说明队列无元素,直接按照题目要求返回-1即可。3、第一步和第二步都原创 2022-02-07 17:31:08 · 50 阅读 · 0 评论