随笔分类 - Java
使用java编写的程序或者和java有关的题目
摘要:144. 二叉树的前序遍历 LeetCode_144 题目描述 方法一:递归法 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode righ
阅读全文
摘要:543. 二叉树的直径 LeetCode_543 题目描述 代码实现 代码撰写的时候需要注意的是left+right+1会多算一个结点。 在返回最终答案的时候需要减去一个结点(树的高度决定的)。 /** * Definition for a binary tree node. * public cl
阅读全文
摘要:200. 岛屿数量 LeetCode_200 题目描述 代码实现 class Solution { int[][] direction = {{-1, 0}, {1, 0}, {0, 1}, {0, -1}}; int m, n; public int numIslands(char[][] gri
阅读全文
摘要:92. 反转链表 II LeetCode_92 题目描述 解法一:穿针引线法-模拟的思路 首先确定一个左边界start表示翻转开始的起始点。 在左右边界之间不断修改next指针指向下一个结点。 当遍历到右边界的下一个字符时开始翻转这一整段的链表。 class Solution { public Li
阅读全文
摘要:113. 路径总和 II LeetCode_113 题目描述 解法一:低效率的递归回溯 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode
阅读全文
摘要: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
阅读全文
摘要:字节跳动2018校招大数据方向(第一批)编程题1 题目描述 P为给定的二维平面整数点集。定义 P 中某点x,如果x满足 P 中任意点都不在 x 的右上方区域内(横纵坐标都大于x),则称其为“最大的”。求出所有“最大的”点的集合。(所有点的横坐标和纵坐标都不重复, 坐标轴范围在[0, 1e9) 内)
阅读全文
摘要:字节跳动2018校招大数据方向(第一批)编程题2 题目描述 给定一个数组序列, 需要求选出一个区间, 使得该区间是所有区间中经过如下计算的值最大的一个: 区间中的最小数 * 区间所有数的和最后程序输出经过计算后的最大值即可,不需要输出具体的区间。如给定序列 [6 2 1]则根据上述公式, 可得到所有
阅读全文
摘要: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() {} *
阅读全文