摘要:
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 阅读全文