
LeetCode
咚咚咚Boom
这个作者很懒,什么都没留下…
展开
-
LeetCode 763 Medium 最小划分区间的长度
def partitionLabels(S): """ 算法:贪心,双指针 思路: 记录每个字母的最后出现的位置,再遍历整个字符串,用一个指针start和end记录当前区间的起止位置, 目标区间应该是能使得区间内的所有字母都只出现在区间内的最短的区间, 所以再遍历一次S,设置end = max(end, last[cha...原创 2019-02-16 15:49:55 · 524 阅读 · 0 评论 -
LeetCode Hard 85 最大矩形面积 Python
def maximalRectangle( matrix): """ Disscussion Method 算法:单调栈 思路: 本题的思路是将原问题转化为类似于84题的形式然后求解。非常巧妙! 关键一步就是将问题转化,可以将矩形分解为长乘宽,或者说底乘高,那么可以遍历矩阵的行,以每一行的1的位置做底, 这一...原创 2019-01-11 15:56:11 · 1839 阅读 · 0 评论 -
LeetCode Hard 128 最长连续子序列 Python
def longestConsecutive(self, nums): """ Solution Method 算法:集合 思路: 其实题解的思路挺朴素的,就是将nums转化为集合,然后使得查找时间退化为O1 只在nums中对每个num做序列起始位置的情况进行查找,然后用while一直从起始位置开始向后探索, ...原创 2019-01-11 15:54:38 · 845 阅读 · 0 评论 -
LeetCode Medium 98 验证二叉搜索树 Python
def isValidBST(self, root): """ My Method 2 Solution Method 也是这个思路 算法:递归 思路: 在递归的过程中判断左右是否满足要求 递归的时候用min_border和 max_border记录当前位置最小不能小于多少,最大不能大于多少 左侧节点应该小于...原创 2019-01-11 15:53:40 · 225 阅读 · 0 评论 -
LeetCode Hard 10 正则表达式匹配 详解 Python 动规
def isMatch(self, s, p): """ Solution Method 算法:动规 思路: 动规的思路是在递归的"暴力"解法下启发的,暴力解法首先是将正则表达式匹配问题看成是比较两个字符串相互匹配 的变种问题,就从头开始一个字符一个字符的去比较,在每次递归中对特殊字符.和*进行特殊的处理和判断,在递归匹配 的过程中...原创 2019-01-02 12:23:59 · 320 阅读 · 0 评论 -
LeetCode 152 Medium 最大子序列积 Python
def maxProduct(self, nums): """ Disscusion Method 可以根据My Method 的动规的做法来引申出这种做法,动规是将每一刻的值都记录了下来,但是事实上 都是遍历一次后,在某次遍历中给max_product赋最终结果值,所以就可以不用dp数组,相当于是O1的空间复杂度 在遍历的时候,每一刻都记录当前的...原创 2019-01-05 20:21:50 · 344 阅读 · 0 评论 -
LeetCode 72 Hard 最小距离 Python
def minDistance(self, word1, word2): """ Solution Method With Mine 算法:动规 思路: 首先看题目意思就能很容易地想到用动规,因为是求最小嘛 下面代码的动规状态建立的是dp[i][j],代表的是word1的第i个位置以前与word2第j个位置以前要建立 ...原创 2019-01-05 19:39:37 · 311 阅读 · 1 评论 -
LeetCode 647 Medium 回文子串个数 Python
def countSubstrings(self, s): """ MyMethod1 算法:动规 思路: 联想第5题,用动规记录和求出字符串s的所有是回文串的子字符串,然后用计数器counter技术 一样也是先从单个字符是回文的dp[i][i]= True开始记录 再到两个字符dp[i][i+1] = s[i]=...原创 2019-01-05 19:38:47 · 1181 阅读 · 0 评论 -
LeetCode 31 Medium 下一排列数 Python
def nextPermutation(self, nums): """ My Method 算法:指针+快排 思路: 首先要理解题意,这个有点头疼,把题意理解后拆分成两个部分就好做了。 题目要求的是下一个更大的排列数,如果没有下一个更大的排列数的话,就将序列升序排序 [1,2,3,5,6,4,3] --> 1...原创 2019-01-05 19:37:47 · 258 阅读 · 0 评论 -
LeetCode 297 Hard 序列化/反序列化 二叉树 Python
class Codec: """ Solution Method 参考答案给的解法是将二叉树DFS序列化,然后对其反序列化 这里我最关键的是每想到这样去反序列化,因为python传参是引用传参,通过这种先左后右虽然传 的都是同一个data,但是其实在左子树和右子树的建立中所看到的data是不一样的,而序列化的建立过程中 又是先左后右的,所以...原创 2019-01-05 19:36:28 · 571 阅读 · 0 评论 -
LeetCode 221 Medium 最大1矩形面积 Python
def maximalSquare(self, matrix): """ My Method 算法:动规 思路: 用dp[i][j]记录以matrix[i][j]为"1"矩形的右下角的矩形的最大边长 matrix[i][j] == 0 的显然dp[i][j] == 0 对matrix[i][j] == 1的来说,如果...原创 2019-01-05 19:35:36 · 649 阅读 · 0 评论 -
LeetCode Hard 145 二叉树后序遍历 Python
def postorderTraversal(self, root): """ 记住得了= = 就访问当前root,然后左子树入栈,右子树入栈,最后逆序一下就好了,return output[::-1] 相当于是这么个思路: 目标:左右根 那么我就先求出来根右左,先根遍历是好访问的,根右左的话,因为是栈,所以先访问根,然后左孩子节点...原创 2018-12-25 20:08:52 · 248 阅读 · 0 评论 -
LeetCode 210 课程安排问题II Python
def findOrder(self, numCourses, prerequisites): """ My Method Optimize 算法:拓扑排序 思路: 相较于My Method Basic 最重要的改变就是用空间换时间,加了一个outdegree数组来记录每个节点的出度情况!这样也更直观! 然后[x...原创 2018-12-25 20:08:03 · 390 阅读 · 0 评论 -
LeetCode Medium 5 最长回文子串 Python
def longestPalindrome(self, s): """ 算法:动态规划DP 思路: 本题中的动规其实是对暴力解法的一种优化,所以还是,先思考暴力解法怎么做? 暴力解法: 遍历所有的可能的字符串,for ... for ... 两层 ,然后依次判断每个字符串是否是回文串,s==s[::-1],逆序ON...原创 2018-12-25 20:07:28 · 138 阅读 · 0 评论 -
LeetCode 146 Hard 实现LRU算法 2种解法 Python
""" My Method 算法:双向链表+字典 思路: 首先一定要回顾一下LRU算法,其实就是一个优先队列,最近使用过的在队尾,时间久的在队头,该队列 是有长度限制的,超出长度后最久未访问的元素出队列,类似于一种先进先出。然后访问元素的时候,要将 该元素设为最近访问过的元素 我这里就设队头代表最近最久未访问,队列尾代表最近...原创 2018-12-31 14:55:13 · 785 阅读 · 1 评论 -
LeetCode Medium 56 合并间隔 Python
def merge(self, intervals): """ 算法:先排序,再merge MD,坑爹,interval居然是个对象,而不是题目中给出的样例那样的[1,2][3,4]原创 2018-12-30 15:49:05 · 273 阅读 · 0 评论 -
LeetCode 75 Medium 颜色排序 Python
def sortColors( nums): """ 算法:类似三路快排的多指针法 思路: 其实比较容易联想到用类似于三路快排的做法,其实只看题意的话也应该联想到用类似于快排的做法 因为就是对0,1,2进行排序嘛, 0,1,2以1做为pivot分割的话正好就是小于1的是一撮,大于1的是一撮,也就是0,1,2的排序 ...原创 2018-12-30 15:48:17 · 235 阅读 · 0 评论 -
LeetCode Medium 96 BST树的个数 Python
def numTrees(self, n): """ Solution Method 算法:动规 思路: 非常巧妙! 首先一定要找到下手点,BST是有有序数组的二叉搜索构建而来的,即某个节点的左节点都比他小,右节点都比他大,利用 这个特点去解题。还原本质,找到状态转移方程 首...原创 2019-01-11 16:01:57 · 278 阅读 · 0 评论 -
LeetCode 239 Hard 滑动窗口内最大值 Python
def maxSlidingWindow(self, nums, k): """ Disscussion Method 算法:单调双向队列 思路: 和单调栈类似,单调栈是栈内元素保持某种单调性,单调双向队列是队列内保持某种单调性,然后由于本题的背景, 所以使用双向队列 首先要明确➡️单调队列保持队...原创 2019-01-17 15:10:10 · 835 阅读 · 0 评论 -
❗️❗️❗️LeetCode Hard 312 打破气球求最大收益 Python
def maxCoins(self, nums): """ HuaHuaJiang's Method 算法:动规 将序列分为 i...k....j 用c[i][j]来表示从nums中第i到j能获取的最大收益,那么答案就是c[1][n] 要将nums 填充,左侧填充1,右侧填充1,来达到nums[-1] = 1和nums[n+1] = 1 ...原创 2019-01-27 18:07:39 · 277 阅读 · 0 评论 -
❗️❗️❗️LeetCode 494 Medium 目标之和 Python
def findTargetSumWays(self, nums, S): """ HuaHuaJiang's Method 算法:动规 元素和是nums_sum,整个数组的元素取值范围就是[-nums_sum,+nums_sum],所以总共可能有的状态值就是2*nums_sum+1 因为列表下标都是正的,所以设定一个offset, ...原创 2019-01-27 14:31:13 · 272 阅读 · 0 评论 -
LeetCode 301 Hard 去除无效括号使得括号对合法 Python
def removeInvalidParentheses(self, s): """ HuaHuaJiang's Method 算法:递归 用l和r记录不匹配的左括号数量和右括号数量 然后从0位置开始递归,如果l == 0 and r == 0 并且做移除不合法括号处理后的字符串是合法的话,即isValid的话, 就添加到结果集中 ...原创 2019-01-26 20:35:19 · 1102 阅读 · 5 评论 -
LeetCode 406 Medium 按身高重排队列 Python
def reconstructQueue(self, people): """ Disscussion Method 算法:贪心, 先处理当前最高的人,因为最高的人前面除了和自己同高度的人,一定不会有更高的人在他前面,而且根据题意,决定 一个人位置的关键在于比他高的人的情况,而比它矮的则不考虑,所以依次安排当前最高的人的站位,先排最高的人是合适的 ...原创 2019-01-26 16:28:53 · 570 阅读 · 1 评论 -
LeetCode Medium 394 字符串解码 Python
#!/usr/bin/env python# _*_ coding:utf-8 _*_def decodeString(self, s): """ My Method 算法:栈 思路: 在栈内保持字符串,和重复的数字 检测到数字的话,向后一直检测,把完整的数字存下来,压栈 检测到字母的话,向后一...原创 2019-01-15 12:38:11 · 540 阅读 · 0 评论 -
LeetCode 543 Easy 二叉树最长路径 Python
#!/usr/bin/env python# _*_ coding:utf-8 _*_def diameterOfBinaryTree(self, root): """ 一个节点要么作为路径的一部分,要么就是作为路径的根节点 作为路径的根节点时,路径长就是左孩子的最大高度+右孩子的最大高度+1 所以用计算高度的方式来计算,更新self.ans retu...原创 2019-01-15 12:36:46 · 3387 阅读 · 3 评论 -
LeetCode 124 Hard 二叉树最大路径和 Python
#!/usr/bin/env python# _*_ coding:utf-8 _*_def maxPathSum(self, root): """ Discussion Method 算法:递归 思路: 要明确怎样可以取到path上的最大路径和 某个节点node处,有这么三种状态, 1.作为路径和的一部...原创 2019-01-15 12:35:44 · 1621 阅读 · 0 评论 -
LeetCode 560 Medium 和为K的子数组 Python
def subarraySum(nums, k): """ Inspired By Hint 算法:哈希表 思路: 首先可以把最暴力的解法写出来,用三层for 遍历一个一个子序列,这样明显有冗余 可以稍微改进,用两层for 来遍历,用一个sum记录前面的累加和,再记录sum += nums[i]加当前的就好了 下面...原创 2019-01-20 19:55:56 · 508 阅读 · 0 评论 -
LeetCode 227 Medium 实现计算器II Python
def calculate( s): """ Disscussion Method 算法:栈 思路: 遍历字符串,将一串式子看成是各种乘除法计算后式子的和 如"1*2-3/4+5*6-7*8+9/10" 可以看成 1*2 + -3/4 + 5*6 + -7*8 + 9/10 也就是说当检测到数字(一...原创 2019-01-20 19:53:30 · 478 阅读 · 0 评论 -
LeetCode 224 Hard 实现计算器I Python
def calculate(self, s): """ Disscussion Method 算法:栈 思路: 输入一共就6种可能 0123456789 ( ) + - _ 空格 所以其实只要对这几种情况分别进行判断就好了,其中空格可以不...原创 2019-01-20 19:52:10 · 463 阅读 · 0 评论 -
LeetCode Meidum 79 搜索单词 Python
def exist(self, board, word): """ My Method 算法:回溯 思路: 比较典型的回溯题的思路,从某个位置出发看看某一处是否满足要求,在某个位置肯定是用BFS,对周围四个 位置进行判断是否满足要求,如果满足要求的话就进一步bfs,每一次bfs判断一个字符,所以要有index来记录当前 判断的是哪个...原创 2019-01-09 15:44:16 · 519 阅读 · 0 评论 -
LeetCode Medium 222 计算完全二叉树节点个数 Python
def countNodes(self, root): """ Disscussion Method 算法:递归 思路: 非常巧妙! 利用完全二叉树和满二叉树的性质,首先满二叉树是完全二叉树的一种特殊情况,即所有位置的节点都不为 空,一颗深度为K的满二叉树其节点总数为2^(k)-1,这个很好算,联想二进制求和...原创 2019-01-09 15:43:00 · 357 阅读 · 0 评论 -
❗️❗️❗️LeetCode Hard 84 最大直方图矩形面积 Python
def largestRectangleArea( height): """ Disscussion Method 算法:单调栈 思路: 首先要明确所有可能的面积都是以某个矩形的高度为高而产生的矩形面积 目标就是在所有这些矩形高度为height的矩形面积中找到最大的那个 注意到原数组内的元素是无序的,所以不能直接用动...原创 2019-01-09 15:41:22 · 532 阅读 · 0 评论 -
❗️❗️❗️LeetCode 309 Medium 带冷却的股票买入卖出 Python
"""n day[i], we can choose cooldown, buy, or sell:Under what condition we can choose to cooldown on day[i]?It is obvious, there is not requirement. We can choose to cooldown on anyday.Under w...原创 2019-01-13 16:36:12 · 311 阅读 · 0 评论 -
LeetCode 32 Hard 最长合法括号对 Python
def longestValidParentheses(self, s): """ Solution Method 算法:动规 思路: 我一开始想的是和最长回文子串一样,用一个二维数组dp[i][j]来记录到s[i:j+1]部分是不是valid括号 就像回文子串一样用动规数组记录valid情况,而不是直接记录最长的子串长。这...原创 2019-01-13 12:19:03 · 361 阅读 · 0 评论 -
LeetCode Medium 621 任务调度-最小间隔数 Python
def leastInterval(self, tasks, n): """ Solution Method 从举例子中我们可以得出任务调度的规律。 如给定:AAABBCD,n=2。那么我们满足个数最多的任务所需的数量,即可以满足任务间隔要求,即:AXXAXXA; (其中,X表示需要填充任务或者idle的间隔) 如果有两种...原创 2019-01-18 12:03:13 · 707 阅读 · 0 评论 -
LeetCode Medium 48 矩阵旋转 Python
def rotate(matrix): """ 算法:旋转 思路: 按照题目的描述进行处理, 注意到第i,j个位置的元素会转移到第j,n-i-1的位置去,暂且叫他为x,y,这个x也还会按照上述转移准则进行下一个位置的转移 也就是说第ij个位置进行变换的时候,会顺时针的变换4个位置,并且这4个位置的坐标转换方式都是一样的,...原创 2018-12-29 18:51:14 · 312 阅读 · 0 评论 -
LeetCode Medium 148 链表排序 Python
def sortList(self, head): """ 暴力解法,将node都取出来然后重新拼接 """ nodes = [] while head != None: nodes.append(head) the_next = head.next head.next = None head...原创 2018-12-29 18:48:33 · 429 阅读 · 0 评论 -
LeetCode Medium 3 最大无重复子串 Python
方法一: 算法:时间窗口+哈希表 思路: 设置begin指针和i指针,在begin与i之间的连续字符串就是s的一个子串 i依次向后移动,begin记录的是无重复子串的初始位置,哈希表记录字符最近的出现在列表中的位置(下标) 借助哈希表来判断当前位置curr的字符char是否已经出现过了,如果未出现那么...原创 2018-12-09 20:42:40 · 129 阅读 · 0 评论 -
LeetCode Medium 322 硬币找零 Python
算法:动规PLUS 思路: 其实和My OLD and TLE Method是一样的 动规方程不变 但是这里对边界值dp[0] = 0,做了很明确的规定,而且在后面的判断条件中,比我原生的naive思路更加合理 即,不用排序coins,只要后面条件中加coin <= amount就行,并且不用遍历coi...原创 2018-12-09 20:40:47 · 517 阅读 · 0 评论 -
LeetCode Medium 300 最长升序子序列 Python
方法一: 算法:动规 思路: 如果设立动规状态dp(i)为前i个元素组成的最长上升序列的长度的话,dp(i)和dp(i-1)建立不起来联系, 因为这里的升上序列不要求是连续的,元素可以是跳着的 设立动规状态dp(i)为以第i个元素为结尾的最长上升序列的长度,则dp(i)所代表的序列中,nums[i]是 ...原创 2018-12-09 20:37:47 · 1529 阅读 · 0 评论