随笔分类 - LeetCode
刷题
摘要:718. 最长重复子数组 LeetCode_718 题目描述 相似题目 1143. 最长公共子序列 解法一:使用动态规划 首先需要说明的是,这题和最长公共子序列是不同的,子序列并没有要求说是连续的,而连续数组则要求是连续的。 首先定义dp[i][j]表示为A[i:]和B[j:]的最长公共前缀。 dp
阅读全文
摘要:62. 不同路径 LeetCode_62 题目描述 题解分析 题目使用动态规划来实现。 在二层循环之前,需要对初始值(行为0或者列为0)进行初始化,这些情况都只有一种走法。 在循环体内,由于只能向下和向右走,所有dp[i][j] = dp[i-1][j] + dp[i][j-1]。 代码实现 cla
阅读全文
摘要:64. 最小路径和 LeetCode_64 题目描述 代码实现 class Solution { public int minPathSum(int[][] grid) { int m = grid.length; int n = grid[0].length; int[][] dp = new i
阅读全文
摘要:1143. 最长公共子序列 LeetCode_1143 题目描述 相似题目 718. 最长重复子数组 题解分析 与最长递增子序列问题类似,本题也属于子序列的问题之一。前面也提到了,子序列的dp方程定义有一个通用的套路,那就是dp[i]通常表示为以i结尾的子序列的最值。 在本题中,我们定义dp[i][
阅读全文
摘要:110. 平衡二叉树 LeetCode_110 题目描述 题解分析 本题可以和求树的高度的实现联系起来。 只有左右子树的高度都求出来才能知道是否是平衡的。 本题的一个难点是如果有一个结点不是平衡的怎么办?解决方案是返回一个负数。以后只要遇到负数就返回负数。 答案就是判断返回的数是否为负数,如果为负数
阅读全文
摘要:88. 合并两个有序数组 LeetCode_88 题目描述 方法一:暴力法 class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { for(int i=0, j=0; j<n;){ if(i >= m
阅读全文
摘要:199. 二叉树的右视图 LeetCode_199 题目描述 方法一:使用宽度优先搜索(类似于层次遍历,每次记录最后一个元素) /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNo
阅读全文
摘要:20. 有效的括号 LeetCode_20 题目描述 相似题目 | 题号 | 题目 | 备注 | | | | | | 20 | 有效的括号 | 栈 | | 22 | 括号生成 | dfs | | 5 | 最长回文子串 | dp | | 647 | 回文子串 | dp | | 32 | 最长有效括号
阅读全文
摘要:102. 二叉树的层序遍历 LeetCode_102 题目描述 题解分析 二叉树的层序遍历需要使用队列来实现,在java中,可以使用LinkedList来实现队列。 因为需要按层输出二叉树的每一层结点,我们可以每次都将队列中的元素全部出列,这些出列的元素就是一层的元素。 在for循环中还需要将下一层
阅读全文
摘要:236. 二叉树的最近公共祖先 题目描述 相似题目:https://www.cnblogs.com/GarrettWale/p/14406641.html 题解分析 此题是利用二叉树的后序遍历来求解最近公共祖先。 递归的出口是遍历到叶子结点或者当前结点(root)等于待搜索的结点(p或者q),此时需
阅读全文
摘要:141. 环形链表 LeetCode_141 题目描述 实现思路 使用快慢指针的方法可以判断是否有环。 需要注意的是:在起始的时候不能把快慢指针都指向head,否则永远不会进入循环!!!! 代码实现 /** * Definition for singly-linked list. * class L
阅读全文
摘要:148. 排序链表 LeetCode_148 题目描述 题解分析 可以利用归并排序的思想对链表进行排序 要利用归并排序,首先就要得到中间结点,这个可以利用快慢指针来实现。 剩下的就是链表合并的问题,具体可以参考:https://www.cnblogs.com/GarrettWale/p/145142
阅读全文
摘要:21. 合并两个有序链表 LeetCode_21 题目描述 解法一:迭代法 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} *
阅读全文
摘要:189. 旋转数组 LeetCode_189 题目描述 方法一:使用暴力法 class Solution { public void rotate(int[] nums, int k) { int n = nums.length; int[] second = new int[n]; for(int
阅读全文
摘要:300. 最长递增子序列 题目描述 方法一:动态规划 与53. 最大子数组和 + 动态规划 + 线段树 问题类似,本题属于子序列问题的一种。 问题的关键是定义好dp动态方程,类似于LeetCode-53题目,我们假设dp[i]表示i结尾的递增子序列的长度。 对于状态转移方程,我们可以这样考虑:因为是
阅读全文
摘要:596. 超过5名学生的课 LeetCode_MySql_596 题目描述 方法一:使用group by + where + 子查询 # Write your MySQL query statement below select c1.class from ( select class, count
阅读全文
摘要:958. 二叉树的完全性检验 LeetCode_958 题目描述 题解分析 题目的关键是判断每一层的结点数是否等于2^i。 此外,还有一个比较关键的因素是判断最后一层的结点是否是偏左的。 以上这两点都可以通过给每个结点设置一个序号,也就是按照二叉树的顺序存储的方式分配序号,如果最后一个结点的序号和所
阅读全文
摘要:题目来源 LeetCode_42 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 题目详情 示例 1: 输入: height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 解释: 上面是由数组 [0,1,0,2,1,0,1,3
阅读全文
摘要:题目来源 LeetCode_53 题目描述 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组
阅读全文
摘要:103. 二叉树的锯齿形层序遍历 LeetCode_103 相似题型:剑指 Offer 32 - III. 从上到下打印二叉树 III 题目描述 LinkedList(Deque的一个实现类)的用法 增加: add(E e):在链表后添加一个元素; 通用方法 addFirst(E e):在链表头部插
阅读全文

浙公网安备 33010602011771号