LeetCode题库
主要刷LeetCode中的经典题目,以java为主
想睡觉的秃鹫
是个编程初学者,平时会敲一下书本上的内容
展开
-
LeetCode-226-反转二叉树
给你一棵二叉树的根节点 ,翻转这棵二叉树,并返回其根节点。原创 2022-06-03 12:20:34 · 338 阅读 · 0 评论 -
LeetCode-110-平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。原创 2022-06-03 09:56:44 · 163 阅读 · 0 评论 -
LeetCode-04-二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。来源:力扣(LeetCode)1.1递归public int maxDepth(TreeNode root) { if (root == null) { ...原创 2022-05-08 11:23:18 · 228 阅读 · 0 评论 -
LeetCode-101-对称二叉树
给你一个二叉树的根节点 root , 检查它是否轴对称。1.1递归public boolean isSymmetric(TreeNode root) { if( root == null) { return true; } //调用递归方法 return deepCheck(root.left,root.right); } boolean deepCheck(TreeNode left, T原创 2022-05-05 09:18:00 · 554 阅读 · 0 评论 -
LeetCode-145-二叉树的后序遍历
给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。1.1一棵树,先访问左子树的值,再访问右子树的值,最后访问根节点的值。因为左子树不能直接指向右子树,所以要先经过根结点才能拿到右子树的值,所以代码与前序遍历、中序遍历有所不同。public List<Integer> postorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>()原创 2022-05-05 08:56:42 · 665 阅读 · 0 评论 -
LeetCode-144-二叉树的前序遍历
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。1.1递归调用1public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); accessTree(root,res); return res; } public void accessTree原创 2022-04-26 10:51:04 · 1276 阅读 · 0 评论 -
LeetCode-94-二叉树的中序遍历
给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。1.1中序遍历:GDHBAEICF1.2使用递归,时间复杂度为O(n),空间复杂度为O(n)class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); accessTree(原创 2022-04-26 10:40:16 · 159 阅读 · 0 评论 -
LeetCode-394-字符串解码
给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。示例 1:输入:s = "3[a]2[bc]"输出:"aaabcbc"示例 2:原创 2022-04-25 08:47:03 · 205 阅读 · 0 评论 -
LeetCode-232-用栈实现队列
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你 只能 使用标准的栈操作 —— 也就是只有push to top,peek/pop from top,siz...原创 2022-04-25 08:25:50 · 188 阅读 · 0 评论 -
LeetCode-剑指Offer22-链表中倒数第k个结点
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.来源:力扣(LeetCode)1.1 使用hash表,<位置,结点>,但是增加了空间复杂度1.2将倒数原创 2022-04-24 13:18:21 · 429 阅读 · 0 评论 -
LeetCode-876-链表的中间结点
给定一个头结点为 head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next.原创 2022-04-24 12:36:12 · 92 阅读 · 0 评论 -
LeetCode-234-回文链表
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。1.1 快指针每次跳两个结点,慢指针每次跳一个结点,那么当快指针指向链表尾部时,慢指针刚好指向链表中间。这时,快指针重新指向头结点,而慢指针进行了反转后半部分链表,即slow指针最后指向的是链表原来的尾结点作为头结点,这时,快指针和慢指针遍历各自链表的值,如果都相同,那么返回ture。 public boolean isPalindrome(ListNode head) {.原创 2022-04-21 13:20:33 · 1148 阅读 · 0 评论 -
LeetCode-206-反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。1.1public ListNode reverseList(ListNode head) { ListNode p = head,prep = null; while(p != null){ ListNode next = p.next; p.next = prep; prep = p; p =.原创 2022-04-21 12:58:33 · 340 阅读 · 0 评论 -
LeetCode-160-相交链表
给你两个单链表的头节点headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。自定义评测:评测系统 的输入如下(你设计的程序 不适用 此输入):intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0listA - 第一个链表listB - 第二个链表ski..原创 2022-04-21 08:17:32 · 588 阅读 · 2 评论 -
LeetCode-142-环形链表II
给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。题目来源:力扣(LeetCode)1.1在141的基础上,我们把快指针重新指向链表头原创 2022-04-20 13:04:21 · 166 阅读 · 0 评论 -
LeetCode-141-环形链表
给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true 。 否则,返回 false 。题目来源:力扣(LeetCode)1.1引入哈希表,遍历时将哈希表中没有的结点放入哈希表中,当出现相同结点时,则证明有环原创 2022-04-19 09:50:28 · 419 阅读 · 0 评论 -
LeetCode-83-删除排序链表中的重复元素
给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。1.1因为链表原本就是有顺序的,所以只有相邻的两节点的值可能相等,所以只需比较相邻结点。如果相邻结点值相等,则当前结点指向下一结点的下一结点,即删除相同值的结点public ListNode deleteDuplicates(ListNode head) { if(head == null){ return head; }原创 2022-04-19 09:34:05 · 400 阅读 · 0 评论 -
LeetCode-21-合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有结点组成示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]题目来源:力扣(LeetCode)1.1使用循环和双指针,生成的链表时另外一条新链表。时间复杂度为O(m+n),空间复杂度为O(1)/*循环+双指针 */ public ListNode mergeTwoLists(ListNode list1, Lis原创 2022-04-18 08:17:00 · 755 阅读 · 0 评论 -
LeetCode-448-找到数组中消失的数字
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。示例 1:输入:nums = [4,3,2,7,8,2,3,1]输出:[5,6]示例 2:输入:nums = [1,1]输出:[2]题目来源:力扣(LeetCode)使用数组本身记录出现过的数字,当数字出现过,则将class Solution { public List<I.原创 2022-04-17 16:24:13 · 268 阅读 · 0 评论 -
LeetCode-283-移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。示例 1:输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]示例 2:输入: nums = [0]输出: [0]题目来源:力扣(LeetCode)采用双指针的解法class Solution { public void moveZeroes(int[] nums) { i原创 2022-04-17 15:55:33 · 755 阅读 · 0 评论 -
LeetCode-88-合并两个有序数组
题目:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。示例 1:输入:nums1 =原创 2022-04-17 08:51:56 · 182 阅读 · 0 评论 -
LeetCode-70-爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?示例 1:输入:n = 2输出:2解释:有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶题目来源:力扣(LeetCode)解题思路:总的来说爬楼梯就是递归,当台阶数为1时,只能选择1;当台阶数为2时,可以选择1、1或者2;当台阶数为3时,可以选择111、12、21;即每次选择都是在上一次选择的基础上进行的。所以有在计算n时...原创 2022-04-16 11:46:37 · 523 阅读 · 0 评论 -
LeetCode-01-两数之和
给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target的那两个整数,并返回它们的数组下标。原创 2022-04-16 11:20:11 · 111 阅读 · 0 评论