
【Leetcode编程题题解(Java/Python实现)】
文章平均质量分 72
Leetcode前150道题目详解,用Python和Java完成,包括题目解释,思路分析,复杂度分析,AC源码。并按题型分类总结。
蛮三刀酱
这个作者很懒,什么都没留下…
展开
-
【算法】二叉树遍历算法总结:前序中序后序遍历
前言二叉树遍历是非常经典的算法题,也是二叉树的一道基础算法题。但是在平常的笔试面试中,其出现的频率其实并不是特别的高,我推测是这种题目相对来说比较基础,算是一个基础知识点。比如剑指offer中出现的后序遍历题目,是给出一个数字序列,让你判断是不是平衡二叉树后序遍历序列,这样出题的难度比直接让你写后序遍历难很多。但是,二叉树遍历容易吗?在递归方法下,前中后序遍历都是一个思路,理解起来也比较...原创 2020-02-22 17:53:56 · 4480 阅读 · 0 评论 -
[Leetcode][python]Evaluate Reverse Polish Notation/逆波兰表达式求值
题目大意有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。输入: [“2”, “1”, “+”, “3”, “*”] 输出: 9 解释: ((2 + 1) * 3) = 9解题思路参考:https://www.cn...原创 2018-06-21 20:23:37 · 774 阅读 · 0 评论 -
[Leetcode][python]Find First and Last Position of Element in Sorted Array/在排序数组中查找元素的第一个和最后一个位置
题目大意给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。解题思路二分查找变种代码看到O(logn)的时间复杂度的查找,就首先想到二分查找,刚好这道题中数字是升序的,所以可以直接拿来用,但是我们要进行一点点小修...原创 2018-08-16 15:19:47 · 1347 阅读 · 0 评论 -
[Leetcode][二分查找]相关题目汇总/分析/总结
题目汇总以下链接均为我博客内对应博文,有解题思路和代码,不定时更新补充。目前范围:Leetcode前150题 二分查找相关题目两个排序数组的中位数 请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。搜索旋转排序数组/搜索旋转排序数组 II 把一个严格升序的数组进行旋转,如[0,1,2,3,4,5]旋转3位成为[3,4...原创 2018-08-16 16:15:10 · 629 阅读 · 0 评论 -
[Leetcode][python]寻找峰值
题目大意https://leetcode-cn.com/problems/find-peak-element/description/峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums...原创 2018-08-16 19:07:20 · 7992 阅读 · 0 评论 -
[Leetcode][python]二叉树的直径
题目大意https://leetcode-cn.com/problems/diameter-of-binary-tree/description/给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。解题思路二叉树的直径:二叉树中从一个结点到另一个节点最长的路径,叫做二叉树的直径采用分治和递归的思想:根节点为roo...原创 2018-08-16 22:25:11 · 1199 阅读 · 0 评论 -
[Leetcode][python]Sort List/排序链表
题目大意https://leetcode-cn.com/problems/sort-list/description/在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。解题思路https://www.cnblogs.com/zuoyuan/p/3699508.html解题思路:由于题目对时间复杂度和空间复杂度要求比较高,所以查看了各种解法,最好的解法就是...原创 2018-08-17 10:29:12 · 1334 阅读 · 0 评论 -
[Leetcode][广度优先/哈希表/纯思路]相关题目汇总/分析/总结
题目汇总以下链接均为我博客内对应博文,有解题思路和代码,不定时更新补充。目前范围:Leetcode前150题 BFS广度优先题目Word Ladder/Word Ladder II/单词接龙/单词接龙 II 难 给定一个起始字符串和一个目标字符串,现在将起始字符串按照特定的变换规则转换为目标字符串,求最少要进行多少次转换。转换规则为每次只能改变字符串中的一个字符,且...原创 2018-08-21 22:25:21 · 895 阅读 · 0 评论 -
[Leetcode][栈]相关题目汇总/分析/总结
题目汇总以下链接均为我博客内对应博文,有解题思路和代码,不定时更新补充。目前范围:Leetcode前150题 栈相关题目Valid Parentheses 判断一串括号开闭是否符合规则Trapping Rain Water 给定数组A,A[i]表示第i个位置的高度,求可以盛放雨水的容量。 栈/纯思路Simplify Path 化简Unix系统下一个文件的绝对路径...原创 2018-06-21 20:25:50 · 829 阅读 · 0 评论 -
[Leetcode][贪心法]相关题目汇总/分析/总结
题目汇总以下链接均为我博客内对应博文,有解题思路和代码,不定时更新补充。目前范围:Leetcode前150题 贪心法相关题目Container With Most Water 利用x轴作底,给出一个数组,两个任意的竖直线段作杯壁,何时盛水最多。贪心+双指针Integer to Roman 将整数转为罗马数字Jump Game/Jump Game II数组中的每个值...原创 2018-06-22 21:22:17 · 925 阅读 · 0 评论 -
[Leetcode][分治法]相关题目汇总/分析/总结
题目汇总以下链接均为我博客内对应博文,有解题思路和代码,不定时更新补充。目前范围:Leetcode前150题 分治法相关题目两个排序数组的中位数 请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。...原创 2018-08-10 19:08:16 · 2537 阅读 · 0 评论 -
[Leetcode][深度优先/回溯法/DFS]相关题目汇总/分析/总结
题目汇总以下链接均为我博客内对应博文,有解题思路和代码,不定时更新补充。目前范围:Leetcode前150题 深度优先/回溯法题目Letter Combinations of a Phone Number/电话号码的字母组合 输入手机键盘的数字,组合所有可能的字母。Permutations/全排列 求一组不重复的数的全排列Permutati...原创 2018-08-15 14:49:21 · 1763 阅读 · 0 评论 -
[Leetcode][Python/Java]Leetcode题解分类汇总(前150题)
前言以下链接均为我博客内对应博文,汇总博文内有对应每个题目的单独文章。有解题思路和代码,都是Python实现,部分有Java实现。不定时更新补充。目前范围:Leetcode前150题汇总[二叉树]相关题目汇总/分析/总结 https://blog.csdn.net/qqxx6661/article/details/76223475[求和问题2Sum/3Sum...原创 2018-08-15 19:00:24 · 4101 阅读 · 2 评论 -
[Leetcode][位运算]相关题目汇总/分析/总结
题目汇总以下链接均为我博客内对应博文,有解题思路和代码,不定时更新补充。目前范围:Leetcode前150题 位运算Single Number/Single Number II 一个数组中除了一个数字出现过一次外,其余的数字都出现了两次,找出那个只出现一次的数字。 一组数字中,有一个数字只出现一次,其余的都出现了三次,找出只出现了一次的那个数字。 Divide Two...原创 2018-03-27 19:26:55 · 739 阅读 · 0 评论 -
[Leetcode][动态规划]相关题目汇总/分析/总结
题目汇总以下链接均为我博客内对应博文,有解题思路和代码,不定时更新补充。目前范围:Leetcode前150题 动态规划题目一维DP一维DP需要的就是清晰的思路,每个题都变化很大Longest Valid Parentheses/最长有效括号 找出一个只包含”(“和”)”的字符串中最长的有效子字符串的长度。有效的意思是指该子字符串中的括号都能正确匹配。Maxim...原创 2018-04-15 19:12:42 · 2674 阅读 · 0 评论 -
[Leetcode][python]Divide Two Integers
题目大意除法运算,但是不能用编程语言提供的乘法、除法和取模运算,即只能用加法和减法实现。解题思路https://blog.csdn.net/qian2729/article/details/50528758代码class Solution(object): def divide(self, dividend, divisor): """ ...原创 2018-03-28 10:07:34 · 553 阅读 · 0 评论 -
[Leetcode][python]Scramble String/扰乱字符串
题目大意https://leetcode-cn.com/problems/scramble-string/description/ 给出两个等长的字符串 s1 和 s2,判断 s2 是否是 s1 的扰乱字符串。解题思路递归字符串长度为1:很明显,两个字符串必须完全相同才可以。 字符串长度为2:当s1=”ab”, s2只有”ab”或者”ba”才可以。 对于任意长度的字符串,...原创 2018-04-11 14:15:00 · 1254 阅读 · 0 评论 -
[Leetcode][python]Find Smallest Letter Greater Than Target/寻找比目标字母大的最小字母
题目大意给定一个有序的字符数组 letters 和一个字符 target,要求找出 letters 中大于 target 的最小字符。letters 字符数组是循环数组。解题思路二分查找变种: 应该注意最后返回的是 l 位置的字符。代码class Solution(object): def nextGreatestLetter(self, letters, tar...原创 2018-05-02 21:29:03 · 587 阅读 · 0 评论 -
【Leetcode】【python】Hamming Distance, Merge Two Binary Trees
题目大意:两个整数的汉明距离是指其二进制不相等的位的个数。 给定两个整数x和y,计算汉明距离。原创 2017-06-29 06:47:57 · 533 阅读 · 0 评论 -
【Leetcode】【python】Array Partition I, Number Complement
Array Partition I题目大意给定一个长度为2n的整数数组,将数组分成n组,求每组数的最小值之和的最大值解题思路偶数数组,排序后奇数位置所有相加就可以原创 2017-07-01 00:40:57 · 492 阅读 · 0 评论 -
[Leetcode][Python/Java]两数之和 Two Sum/两数之和 II - 输入有序数组 Two Sum II
Two Sum题目大意给定一个整数数组,从中找出两个数的下标,使得它们的和等于一个特定的数字。假设题目有唯一解。解题思路哈希时间复杂度:O(nlogn) 注意:不是 O(n) ,因为 哈希 也要复杂度的。 (存疑):在各种语言中dict实现不同,java中理论上说是O(1),python中存疑,查了一些资料有的说是O(n),惊了。利用字典idxDict保存...原创 2017-07-04 01:11:20 · 1875 阅读 · 1 评论 -
【Leetcode】【python】Arranging Coins
Arranging Coins标准答案代码来自书影博客题目大意你有n枚硬币,想要组成一个阶梯形状,其中第k行放置k枚硬币。 给定n,计算可以形成的满阶梯的最大行数。 n是非负整数,并且在32位带符号整数范围之内。解题思路数学方法每行想填满需要k*(k+1)/2个硬币二分枚举答案(Binary Search)其实还是k*(k+1)/2的思路啊代码数学方法class Solution(object)原创 2017-07-05 01:42:59 · 754 阅读 · 0 评论 -
[Leetcode][python]Palindrome Number/回文数
题目大意判断一个整数(integer)是否是回文,不要使用额外的空间。解题思路大概就是告诉我们:1,负数都不是回文数;2,不能通过将数字转为字符串来判断回文,因为使用了额外的空间(即只能使用空间复杂度 O(1) 的方法);3,注意整数溢出问题;4,这个问题有一个比较通用的解法。代码生成一个反转整数,通过比较反转整数和原整数是否相等来判断回文。 见我提交的代码。 如果要进一步改进,实际上将原数字反原创 2017-07-07 07:57:26 · 624 阅读 · 0 评论 -
[Leetcode][python]Pascal's Triangle/Pascal's Triangle II/杨辉三角/杨辉三角 II
Pascal’s Triangle题目大意输出帕斯卡三角前N行 1 121 1331解题思路注意帕斯卡三角中,除了首尾,其他值为上一层的两个邻值的和代码class Solution(object): def generate(self, numRows): """ :type numRows: int :rtype: List[List原创 2017-07-08 06:48:19 · 548 阅读 · 0 评论 -
【Leetcode】【python】Number of Segments in a String
题目大意计算字符串中的非空子串的个数。解题思路split()代码split即可总结这题对于python来说有点智障,然而智障的我还是把他想复杂了,我写的是:class Solution(object): def countSegments(self, s): """ :type s: str :rtype: int """原创 2017-07-11 01:04:59 · 657 阅读 · 0 评论 -
【Leetcode】【python】Factorial Trailing Zeroes
题目大意给定一个整数n,返回n!(n的阶乘)数字中的后缀0的个数。 注意:你的解法应该满足多项式时间复杂度。解题思路思路参考:书影博客朴素解法:首先求出n!,然后计算末尾0的个数。(重复÷10,直到余数非0)该解法在输入的数字稍大时就会导致阶乘得数溢出,不足取。O(logn)解法:一个更聪明的解法是:考虑n!的质数因子。后缀0总是由质因子2和质因子5相乘得来的。如果我们可以计数2和5的个数,问题就原创 2017-07-12 01:35:52 · 440 阅读 · 0 评论 -
[Leetcode][python]删除排序数组中的重复项/删除排序数组中的重复项 II
Remove Duplicates from Sorted Array题目大意对排好序的list去重,输出去重后长度,并且不能创建新的数组解题思路使用一个指针j,当i向后遍历数组时,如果遇到与A[j]不同的,将A[i]和A[j+1]交换,同时j=j+1,即j向后移动一个位置,然后i继续向后遍历。代码(我提交的)class Solution(object):...原创 2017-07-13 00:16:52 · 1085 阅读 · 0 评论 -
[Leetcode][python]Add Two Numbers/两数相加
题目大意给定两个链表分别代表两个非负整数。数位以倒序存储,并且每一个节点包含一位数字。将两个数字相加并以链表形式返回。解题思路链表简单相加,到10进位代码根据书影博客class Solution(object): def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2:原创 2017-07-15 04:05:37 · 1567 阅读 · 0 评论 -
[Leetcode][python]Symmetric Tree/对称二叉树
题目大意判断一个树是否左右对称解题思路非递归解法按层遍历,每一层检查一下是否对称。递归解法其中左子树和右子树对称的条件: 两个节点值相等,或者都为空 左节点的左子树和右节点的右子树对称 左节点的右子树和右节点的左子树对称代码递归(清晰易懂版)class Solution(object): def judge(self, p, q): if p == None and q原创 2017-07-19 02:04:21 · 1540 阅读 · 0 评论 -
[Leetcode][Python/Java]Binary Tree Level Order Traversal/二叉树层序遍历
题目大意实现树的广度优先遍历,每一层上的数据按照从左到右的顺序排列。解题思路参考:链接 将树每一层的节点存在一个列表中,遍历列表中的元素,如果该节点有左右节点的话,就把它们加入一个临时列表,这样当遍历结束时,下一层的节点也按照顺序存储好了,不断循环直到下一层的列表为空。代码BFSclass Solution(object): def levelOrder(self, root):原创 2017-07-20 04:42:31 · 1404 阅读 · 0 评论 -
[Leetcode][python]Binary Tree Zigzag Level Order Traversal
题目大意按之字形遍历二叉树(一正一反)解题思路来自:链接 解题思路:这道题和上一题层序遍历那道题差不多,区别只是在于奇数层的节点要翻转过来存入数组。 代码:代码BFSclass Solution(object): def zigzagLevelOrder(self, root): tree = [] if not root: ret原创 2017-07-21 06:50:27 · 1478 阅读 · 3 评论 -
[Leetcode][python]Maximum Depth of Binary Tree/二叉树的最大深度
题目大意求二叉树最大深度解题思路递归代码递归def maxDepth(self, root): if root == None: return 0 return max(self.maxDepth(root.left),self.maxDepth(root.right))+1递归(沿用修改前两题代码)class Solution(object)原创 2017-07-22 07:55:54 · 1359 阅读 · 0 评论 -
[Leetcode][python]从前序与中序遍历序列构造二叉树/从中序与后序遍历序列构造二叉树
题目大意根据二叉树的前序遍历和中序遍历( 中序和后序)结果生成二叉树 假设没有重复数字解题思路参考给中序和后序遍历 看到树首先想到要用递归来解题。以这道题为例:如果一颗二叉树为{1,2,3,4,5,6,7},则中序遍历为{4,2,5,1,6,3,7},后序遍历为{4,5,2,6,7,3,1},我们可以反推回去。由于后序遍历的最后一个节点就是树的根。也就是root=1,然后我们在...原创 2017-07-23 12:48:16 · 3864 阅读 · 0 评论 -
[Leetcode][python]Binary Tree Level Order Traversal II
题目大意层序输出二叉树,这次是从最下层输出到根节点解题思路只要在Binary Tree Level Order Traversal的基础上加一行反转代码DFS代码请看上面一题,都只要加一行。BFS# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# s原创 2017-07-25 07:02:51 · 714 阅读 · 0 评论 -
[Leetcode][python]Convert Sorted Array to Binary Search Tree
题目大意将一个排序好的数组转换为一颗二叉查找树,这颗二叉查找树要求是平衡的。解题思路由于要求二叉查找树是平衡的。所以我们可以选在数组的中间那个数当树根root,然后这个数左边的数组为左子树,右边的数组为右子树,分别递归产生左右子树就可以了。注意:如果是偶数个数的数组,那么答案就有多种可能。这也是为什么我的代码分为奇数偶数判定,而标准答案没用,经过测试,两种代码生成两种不同的答案,并且leetcode原创 2017-07-26 07:11:55 · 1482 阅读 · 0 评论 -
[Leetcode][python]Convert Sorted List to Binary Search Tree
题目大意将一个升序链表转为有序二叉树 和上一题的不同仅仅是将数组换成了链表解题思路首先想到的是将链表存入数组,然后和上一题相同。网上思路是用快慢指针,慢指针每次走一格,快指针每次走两格代码转为数组(街上一题)# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):#原创 2017-07-27 06:30:48 · 1738 阅读 · 0 评论 -
[Leetcode][python]Binary Tree Inorder Traversal/二叉树的中序遍历
题目大意中序遍历一个二叉树 挑战:不用递归只用迭代做解题思路递归简单 迭代:参考 我们使用一个栈来解决问题。步骤如下:一,我们将根节点1入栈,如果有左孩子,依次入栈,那么入栈顺序为:1,2,4。由于4的左子树为空,停止入栈,此时栈为{1,2,4}。二,此时将4出栈,并遍历4,由于4也没有右孩子,那么根据中序遍历的规则,我们显然应该继续遍历4的父亲2,情况是这样。所以我们继续将2出栈并遍历2,2原创 2017-07-28 05:13:22 · 943 阅读 · 0 评论 -
[Leetcode][python]Unique Binary Search Trees/不同的二叉查找树
题目大意给出一个n,求1-n能够得到的所有二叉搜索树解题思路转自博客这题想了好久才想清楚。其实如果把上例的顺序改一下,就可以看出规律了。 比如,以1为根的树有几个,完全取决于有二个元素的子树有几种。同理,2为根的子树取决于一个元素的子树有几个。以3为根的情况,则与1相同。定义Count[i] 为以[0,i]能产生的Unique Binary Tree的数目,如果数...原创 2017-07-29 04:10:07 · 1828 阅读 · 0 评论 -
[Leetcode][python]Unique Binary Search Trees II
题目大意给出一个n,求1-n能够得到的所有二叉搜索树,输出所有树解题思路递归拼接树该题较难,参考题解的思路。从start到end,先把左右字数的所有可能先迭代出来,之后递归加入左右字数,生成每一颗新树。代码class Solution(object): def generateTrees(self, n): if n == 0: ...原创 2017-07-30 03:20:21 · 1519 阅读 · 0 评论 -
[Leetcode][python]Validate Binary Search Tree
题目大意判断一棵树是否为二叉搜索树解题思路想到了中序遍历整棵树,那么结果应该是升序的。直接套用之前的中序遍历代码,稍加修改即可。 网上的答案很多都在分析负无穷正无穷(效率高?),我觉得能和之前中序遍历串起来就足够了。代码中序遍历(生成数组后判断是否为升序)class Solution(object): def inorderTraversal(self, root, inorder):原创 2017-08-01 04:55:17 · 1501 阅读 · 0 评论