
LeetCode题解
程序员小台
这个作者很懒,什么都没留下…
展开
-
LeetCode 5. 最长回文子串(Java)
【题目描述】给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"解题思路:动态规划设状态dp[j][i]表示索引j到索引i的子串是否是回文串。则转移方程为:则dp[j][i]为true时表示索引j到索引i...原创 2019-07-30 23:36:54 · 266 阅读 · 1 评论 -
LeetCode 236.二叉树的最近公共祖先(Java)
题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,...原创 2019-07-12 10:29:09 · 247 阅读 · 0 评论 -
LeetCode 235.二叉搜索树最近公共祖先(Java)
题目:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [...原创 2019-07-12 10:22:20 · 354 阅读 · 0 评论 -
LeetCode 337.打家劫舍III(Java)
题目:在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。示例 1:输入: [3,2,...原创 2019-07-11 09:42:11 · 378 阅读 · 0 评论 -
LeetCode 445.两数相加II(Java)
给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:链表不能修改该,换句话说,你不能对列表中的节点进行翻转。示例:输入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)输出: 7 -> 8 -&...原创 2019-07-09 16:05:19 · 801 阅读 · 0 评论 -
LeetCode 2.两数相加(Java)
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> ...原创 2019-07-09 16:01:35 · 187 阅读 · 0 评论 -
LeetCode 206.反转链表(Java)
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL思路:让我们从链表头部开始,建立三个临时节点的引用,分别为p1,p2,p3。它们分别指向头节点、第二个节点、第三个节。完整步骤如下:遍历途中将把p2节点原本指向p3的next指针倒转,指向p1。三个临时节点引...原创 2019-07-09 14:48:29 · 265 阅读 · 0 评论 -
LeetCode 234.回文链表(Java)
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true思路:先找到链表的中点,将中点及其以后的节点构成的链表利用反转链表的方法反转,然后依次和头节点比较值,如果都相等则代表是回文链表。public boolean isPalindrome(ListNode head) { ...原创 2019-07-09 14:32:14 · 206 阅读 · 0 评论 -
LeetCode 328.奇偶链表(Java)
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2-&g...原创 2019-07-09 14:19:48 · 288 阅读 · 0 评论 -
LeetCode 第 144 场周赛 【IP 地址无效化】【航班预订统计】【删点成林】
5117. IP 地址无效化给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。所谓无效化 IP 地址,其实就是用 “[.]” 代替了每个 “.”。示例 1:输入:address = "1.1.1.1"输出:"1[.]1[.]1[.]1"示例 2:输入:address = "255.100.50.0"输出:"255[.]100[.]50[.]0"...原创 2019-07-08 11:53:43 · 344 阅读 · 0 评论 -
LeetCode 第 143 场周赛 【分糖果 II】【二叉树寻路】【填充书架】【解析布尔表达式】
1103. 分糖果 II排排坐,分糖果。我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友。给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n 颗糖果。然后,我们再回到队伍的起点,给第一个小朋友 n + 1 颗糖果,第二个小朋友 n + 2 颗,依此类推,直到给最后一个小朋友 2 * n 颗糖果。重复上述过程...原创 2019-07-07 19:14:50 · 314 阅读 · 0 评论 -
LeetCode 第 142 场周赛 【大样本统计】【拼车】【山脉数组中查找目标值】【花括号展开 II】
1093. 大样本统计我们对 0 到 255 之间的整数进行采样,并将结果存储在数组 count 中:count[k] 就是整数 k 的采样个数。我们以 浮点数 数组的形式,分别返回样本的最小值、最大值、平均值、中位数和众数。其中,众数是保证唯一的。我们先来回顾一下中位数的知识:如果样本中的元素有序,并且元素数量为奇数时,中位数为最中间的那个元素;如果样本中的元素有序,并且元素数量为偶...原创 2019-06-23 21:31:40 · 523 阅读 · 0 评论 -
LeetCode 第 141 场周赛 【复写零】【受标签影响的最大值】【二进制矩阵中的最短路径 显示英文描述】【最短公共超序列】
1089. 复写零给你一个长度固定的整数数组 arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。注意:请不要在超过该数组长度的位置写入元素。要求:请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。示例 1:输入:[1,0,2,3,0,4,5,0]输出:null解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4]示例 2:输入:...原创 2019-06-17 11:41:05 · 414 阅读 · 0 评论 -
LeetCode 第 140 场周赛 【Bigram 分词】【活字印刷】【根到叶路径上的不足节点】【不同字符的最小子序列】
5083. Bigram 分词给出第一个词 first 和第二个词 second,考虑在某些文本 text 中可能以 “first second third” 形式出现的情况,其中 second 紧随 first 出现,third 紧随 second 出现。对于每种这样的情况,将第三个词 “third” 添加到答案中,并返回答案。示例 1:输入:text = "alice is a goo...原创 2019-06-10 10:53:36 · 534 阅读 · 0 评论 -
LeetCode 17.电话号码的自由组合(Java)
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。思路1:利用队列先进先出的性质进行横向...转载 2019-06-04 09:57:52 · 509 阅读 · 0 评论 -
LeetCode 547.朋友圈(Java)
班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出所有学生中的已知的朋友圈总数。示例 ...原创 2019-06-03 10:40:13 · 1072 阅读 · 0 评论 -
LeetCode 695.岛屿的最大面积(Java)
给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0], [0,1,1,...原创 2019-06-01 10:13:42 · 749 阅读 · 0 评论 -
LeetCode 524.通过删除字母匹配到字典里最长单词
通过删除字母匹配到字典里最长单词 最长子序列 Java版本给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。示例 1:输入:s = "abpcplea", d = ["ale","apple","monkey","plea"]输出: "appl...原创 2019-05-27 10:53:08 · 523 阅读 · 0 评论 -
LeetCode 141.环形链表
判断链表是否存在环 Java版本给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], ...原创 2019-05-27 09:54:45 · 117 阅读 · 0 评论 -
LeetCode 680.验证回文字符串 Ⅱ
680.验证回文字符串 Ⅱ Java版本Input: "abca"Output: TrueExplanation: You could delete the character 'c'.题目描述:可以删除一个字符,判断是否能构成回文字符串。思路:从左右两端开始验证是否是回文串,验证的过程中,若两个字符不等,再左右各加一或减一,验证一遍。 public boolean validPal...原创 2019-05-26 21:29:20 · 176 阅读 · 0 评论 -
LeetCode 第 138 场周赛
第 138 场周赛在一个仓库里,有一排条形码,其中第 i 个条形码为 barcodes[i]。请你重新排列这些条形码,使其中两个相邻的条形码 不能 相等。 你可以返回任何满足该要求的答案,此题保证存在答案。示例 1:输入:[1,1,1,2,2,2]输出:[2,1,2,1,2,1]示例 2:输入:[1,1,1,1,2,2,3,3]输出:[1,3,1,3,2,1,2,1]提示:...原创 2019-05-26 17:37:54 · 242 阅读 · 0 评论 -
LeetCode 1004.最大连续1的个数 Max Consecutive Ones III Java版本
题目地址:https://leetcode.com/problems/max-consecutive-ones-iii/题目描述:Given an array A of 0s and 1s, we may change up to K values from 0 to 1.Return the length of the longest (contiguous) subarray that ...原创 2019-05-26 16:25:27 · 502 阅读 · 0 评论 -
LeetCode 540. 有序数组中的单一元素
O(logN) 时间复杂度进行求解给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。Input: [1, 1, 2, 3, 3, 4, 4, 8, 8]Output: 2思路:令 index 为 Single Element 在数组中的位置。在 index 之后,数组中原来存在的成对状态被改变。如果 m 为偶数,并且 m + 1 < inde...原创 2019-05-26 10:29:29 · 173 阅读 · 0 评论 -
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置
复杂度必须是 O(log n) 级别给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = ...原创 2019-05-26 10:07:43 · 146 阅读 · 0 评论 -
LeetCode 744. 寻找比目标字母大的最小字母
题目描述:给定一个有序的字符数组 letters 和一个字符 target,要求找出 letters 中大于 target 的最小字符,如果找不到就返回第 1 个字符。示例:输入:letters = ["c", "f", "j"]target = "a"输出: "c"输入:letters = ["c", "f", "j"]target = "c"输出: "f"输入:let...原创 2019-05-25 21:28:39 · 225 阅读 · 0 评论 -
LeetCode 69. x 的平方根
笔记Input: 4Output: 2Input: 8Output: 2Explanation: The square root of 8 is 2.82842..., and since we want to return an integer, the decimal part will be truncated.示例 1:输入: 4输出: 2示例 2:输入: 8输...原创 2019-05-25 20:56:37 · 142 阅读 · 0 评论