07 2015 档案
摘要:097 Interleaving String这道题也是纯dp了class Solution: # @param {string} s1 # @param {string} s2 # @param {string} s3 # @return {boolean} def ...
阅读全文
摘要:91 Decode Waysdp解法 O(1) spaceclass Solution: # @param {string} s # @return {integer} def numDecodings(self, s): if s == "" or s[0] == ...
阅读全文
摘要:022 Generate Parentheses纯递归解法class Solution: def __init__(self): self.ans = [] def generateParenthesis(self, n): self.help(n, ...
阅读全文
摘要:240 Search a 2D Matrix II这是个young‘s矩阵,最好的就是O(m+n)的算法了class Solution: # @param {integer[][]} matrix # @param {integer} target # @return {boole...
阅读全文
摘要:103 Binary Tree Zigzag Level Order Traversallevel traversal的变种class Solution: # @param {TreeNode} root # @return {integer[][]} def zigzagLeve...
阅读全文
摘要:108 Convert Sorted Array to Binary Search Tree递归解法还是非常直观的class Solution: # @param {integer[]} nums # @return {TreeNode} def sortedArrayToBST(...
阅读全文
摘要:117 Populating Next Right Pointers in Each Node II就是 Bibary Tree Level order Traverseclass Solution: # @param root, a tree link node # @return n...
阅读全文
摘要:102 Binary Tree Level Order Traversalclass Solution: # @param {TreeNode} root # @return {integer[][]} def levelOrder(self, root): if r...
阅读全文
摘要:139 Word Break纯dpclass Solution: # @param s, a string # @param dict, a set of string # @return a boolean def wordBreak(self, s, dict): ...
阅读全文
摘要:077 Combinations这道题纯dfs, 但是在 Line 13处做了个剪枝 从84ms 提高到68 ms 1 class Solution: 2 def __init__(self): 3 self.ans = [] 4 5 def combine...
阅读全文
摘要:188 Best Time to Buy and Sell Stock IV这道题是我目前为止最得意的一道题了 看看自己的运行时间已经超出所有 Python的解法 自己都醉了class Solution: def __init__(self): self.start = 0 ...
阅读全文
摘要:165 Compare Version Numbers用python处理字符串还是比较简单的class Solution: # @param {string} version1 # @param {string} version2 # @return {integer} de...
阅读全文
摘要:076 Minimum Window Substring这道题就是用一个dictionary来跟踪有多少还需要Match的字母以及当前需要match的次数。 再用一个queue 来记录哪些字幕被Match了以及他们被match的顺序from collections import defaultdic...
阅读全文
摘要:115 Distinct Subsequences这道题是dp, 我定义的dp[i][j] 为用t[:i] 和s[:j] 的disitinct subsequence排列数class Solution: # @param {string} s # @param {string} t ...
阅读全文
摘要:129 Sum Root to Leaf Numbers基本就是递归了class Solution: def __init__(self): self.ans = 0 def sumNumbers(self, root): self.help(root, ""...
阅读全文
摘要:071 Simplify Path有了split,天下我有class Solution: # @param {string} path # @return {string} def simplifyPath(self, path): stack = [] ...
阅读全文
摘要:114 Flatten Binary Tree to Linked List这道题就是Preorder的稍微变种, 记住 pre 的节点就好class Solution: def __init__(self): self.pre = TreeNode("dummy") ...
阅读全文
摘要:075 Sort Colors这道题最偷懒的方法当时是 counting sort. 但是显然这道题不是考这个, 而且那样需要扫描2便。 真正的解法是 one scan, 设置一头一尾 加上 Current一共三个指针进行 swapclass Solution: # @param {integ...
阅读全文
摘要:239 Sliding Window Maximum这道题是 double-ended queue 的最典型应用class Solution: # @param {integer[]} nums # @param {integer} k # @return {integer[]} ...
阅读全文
摘要:073 Set Matrix Zeroes这道题唯一有点tricky的地方就是 需要O(1) 的space, 这样就利用第一个行 和第一列作为整个matrix的标记位,再用 row 和 col两个作为第一列和第一个行的标志位class Solution: # @param {integer[]...
阅读全文
摘要:040 Combination Sum II这道题是039 Combination Sum的延伸, 稍作改动就好class Solution: # @param {integer[]} candidates # @param {integer} target # @return {...
阅读全文
摘要:039 Combination Sum这道题就是暴力搜索, 但是有个优化 就是 Line 14 处加一个 if a[s] > target 就不需要重复搜索 这样运行时间会从 236ms 变成108ms 1 class Solution: 2 # @param {integer[]} can...
阅读全文
摘要:030 Substring with Concatenation of All Words用一个dictiionary来记录当前对应还有多少需要match的word。 dict.copy()用来copy dictionary.from collections import defaultdictcl...
阅读全文
摘要:064 Minimum Path Sum纯dpclass Solution: # @param {integer[][]} grid # @return {integer} def minPathSum(self, grid): m = len(grid) ...
阅读全文
摘要:034 Search for a Range二分搜索, 搜左右部分稍微有些不同 需要注意class Solution: # @param {integer[]} nums # @param {integer} target # @return {integer[]} def ...
阅读全文
摘要:232 Implement Queue using Stacks用2个stack 完成 代码如下class Queue: # initialize your data structure here. def __init__(self): self.stackA = [] ...
阅读全文
摘要:234 Palindrome Linked List这道题如果不要求space O(1) 代码写起来就相当简单。 但是要求 O(1),唯一的方法就是reverse 前半部分linked List 在做比较, 稍微注意长度为奇偶时一点小小的区别。写起来还是很费劲的class Solution: ...
阅读全文
摘要:238 Product of Array Except Self从头部 和 尾部各扫描一遍class Solution: # @param {integer[]} nums # @return {integer[]} def productExceptSelf(self, nums...
阅读全文
摘要:090 Subsets 2这道题就是要考虑重复的状况和 permutations 2 一样的排除重复可能的组合就是在当前位置,如果选择的值和前面那个值一样 则跳过不进行选择第二次class Solution: # @param {integer[]} nums # @return {in...
阅读全文
摘要:078 Subsets纯递归解法class Solution: # @param {integer[]} nums # @return {integer[][]} def subsets(self, nums): nums.sort() return s...
阅读全文
摘要:049 Anagrams这道题就是简单的哈希表了from collections import defaultdictclass Solution: # @param {string[]} strs # @return {string[]} def anagrams(self, s...
阅读全文
摘要:044 Wildcard Matching这道题直观想法是用dp 复杂度 O(mn) 代码如下, 但是在用python的时候会超时class Solution: # @param {string} s # @param {string} p # @return {boolean} ...
阅读全文
摘要:072 Edit Distance纯dp 解法, 唯一可以优化的就是空间复杂度了,以下代码没有优化。。。class Solution: # @param {string} word1 # @param {string} word2 # @return {integer} de...
阅读全文
摘要:题目:124 Binary Tree Maximum Path Sum这道题就是分别算出左子树和右子树的可能最大和,然后对Path的值进行更新即可class Solution: def __init__(self): self.ans = -100000 def maxPa...
阅读全文
摘要:题目: 096 Unique Binary Search Trees这道题目就是catalan数, 因为递归关系 为 代码为class Solution: # @param {integer} n # @return {integer} def numTrees(self, n)...
阅读全文
摘要:题目:032 Longest Valid Parentheses这道题是典型的堆栈应用class Solution: # @param {string} s # @return {integer} def longestValidParentheses(self, s): ...
阅读全文
摘要:题目: 056 Merge Intervals这道题和 057 基本相似, 想法更加直接, 对start 进行排序,然后扫描一次并跟新返回的答案class Solution: # @param {Interval[]} intervals # @return {Interval[]} ...
阅读全文
摘要:题目: 057 Insert Intervals这道题就是要考虑两个边界点是否会落到原有的intervals中的某一个区间之内 还是在外部, 分情况讨论即可class Solution: # @param intervals, a list of Intervals # @param n...
阅读全文
摘要:题目:130 Surrounded Regionsbfs搜索即可from Queue import Queueclass Solution: # @param {character[][]} board # @return {void} Do not return anything, m...
阅读全文
摘要:题目:120 Triangle这道题纯dp, 但是有一个比一下代码优化的做法,就是从底部bottomu-up dp.class Solution: # @param triangle, a list of lists of integers # @return an integer ...
阅读全文
摘要:题目 134 Gas Station这道题有一个需要利用的条件即是如果存在这样一个station则答案唯一。class Solution: # @param {integer[]} gas # @param {integer[]} cost # @return {integer} ...
阅读全文
摘要:题目:236 Lowest Common Ancestor of a Binary Tree这道题和 235基本一样class Solution: # @param {TreeNode} root # @param {TreeNode} p # @param {TreeNode} ...
阅读全文
摘要:题目235 Lowest Common Ancestor of a Binary Search Tree因为是binary search tree,因此利用没个节点的值进行二分查找即可复杂度O(h)class Solution: # @param {TreeNode} root # @p...
阅读全文
摘要:118 Pascal's Triangle这道题是easy, 为了凑齐今天的第十题。。。class Solution: # @param {integer} numRows # @return {integer[][]} def generate(self, numRows): ...
阅读全文
摘要:150 Evaluate Reverse Polish Notation这道题唯一要注意的是 python 中 eval("3/-5") 会得到-1 而不是0, 因此使用 int(eval("3/-5."))可以得到0, 即在待计算的string后面加一个"."就能解决这个问题class Solut...
阅读全文
摘要:这道题需要用到python中的 OrderedDictclass LRUCache: def __init__(self, capacity): self.dict = collections.OrderedDict() self.capacity = capaci...
阅读全文
摘要:这道题与153 Find Minimum in Rotated Sorted Array 基本相同,只是有可能有重复的数字, 这样a[left] 就可能与a[mid]相同 因此就多一个可能,因此在最坏的情况下复杂度会是O(n)class Solution: # @param {integer[...
阅读全文
摘要:这道题与033 Search in Rotated Sorted Array基本思路一样, 也是比较最左边和中间的值的差别,唯一要注意的是 当a[left] < a[mid]的时候需要将a[left] 加入到右半部分一起考虑,因为有可能a[left] 就是最小值class Solution: ...
阅读全文
摘要:又是一道纯数学的题, 纸上认真研究下就好。 这道题需要Inplace, 所以写了个辅助的reverse.class Solution: # @param {integer[]} nums # @return {void} Do not return anything, modify nu...
阅读全文
摘要:这道题与 046 Permutations 基本一样, 唯一要注意的是需要去除重复的。 方法是在每一层的选数过程中如果相邻(当然是先排序了的)的数字相同,则在这一层中不再选举。class Solution: # @param {integer[]} nums # @return {int...
阅读全文
摘要:这道题其实并没有说明这些数字互相不同, 但是因为有047 Permuations 2,则可以假定没有重复的数字, 使用递归。 代码如下class Solution: # @param {integer[]} nums # @return {integer[][]} def perm...
阅读全文
摘要:这道题纯考数学,懒得打字解释了 方法如下from math import factorial class Solution: # @param {integer} n # @param {integer} k # @return {string} def getPermuta...
阅读全文
摘要:这道题有一个直观的想法, 就是分别记录每个点的左侧和右侧最大值 对于height[i] 这一点能装的水等于 min(leftMax[i], rightMax[i]) - height[i]. 这个解法需要扫描2次序列。以下的方法只需要扫描一次序列即可。class Solution: # @pa...
阅读全文
摘要:二分法, 最后注意一下输出的时候要和 nums[left]比较一下来决定输出多少class Solution: # @param {integer[]} nums # @param {integer} target # @return {integer} def search...
阅读全文
摘要:在 033Search in Rotated Sorted Array 稍作改进, 但是最坏情况下 复杂度为O(n)class Solution: # @param A, a list of integers # @param target, an integer to be searc...
阅读全文
摘要:这道题比较a[start] 和 a[half]的值就可以判断 该序列的头在左半部分 还是右半部分,这样就可以利用二分查找了class Solution: # @param A, a list of integers # @param target, an integer to be se...
阅读全文
摘要:遍历一遍就好class Solution: def __init__(self): self.mapping = {'2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', '6': 'mno', '7': 'pqrs', '8': 'tuv...
阅读全文
摘要:想法很直接 复杂度O(mn)class Solution: # @param {string[]} strs # @return {string} def longestCommonPrefix(self, strs): n = len(strs) if...
阅读全文
摘要:这道题与 015 3 SUM 基本思路一样 都是夹逼思想 复杂度 O(n*n)class Solution: # @param {integer[]} nums # @param {integer} target # @return {integer} def threeSu...
阅读全文
摘要:这道题县排序 然后设定好第一位,后面两位夹逼搜索就好, 但是因为数字会出现重复,导致得出的3元祖也有可能重复,一开始我的办法是采用set来避免多次加入同样的三元组,运行时间为 344msclass Solution: # @param {integer[]} nums # @return...
阅读全文
摘要:一开始的想法是先确定行,在确定是否在这一行中 方法如下class Solution: # @param {integer[][]} matrix # @param {integer} target # @return {boolean} def searchMatrix(se...
阅读全文
摘要:这道题使用dp。 dpMax[i] = max(nums[i], nums[i]*dpMax[i-1], nums[i]*dpMin[i-1])多记录一个 dpMin[i]= min(nums[i], nums[i]*dpMax[i-1], nums[i]*dpMin[i-1])但是空间上不需...
阅读全文
摘要:拓扑排序, 输出一种可能的排序结果,207Course Schedule 稍微变化一点即可得到正确答案from collections import defaultdictclass Solution: # @param {integer} numCourses # @param {in...
阅读全文
摘要:使用 拓扑排序, 使用刚学的defaultdict 哈哈from collections import defaultdictclass Solution: # @param {integer} numCourses # @param {integer[][]} prerequisite...
阅读全文
摘要:这道题一开始无从下手,想到找到用hashtable,这样查询没个数是否在List中只需要O(1)时间。以上是第一步, 接下来的想法就比较自然, 将每个数都当成可能的起始点进行测试。待测试的起始点为n,如果n-1在set中,则n必不为起始数字,可以continue优化运行时间代码中使用set来实现ha...
阅读全文
摘要:此题即在 052 N Queens 2 基础上稍作改进 并注意返回格式就好import copyclass Solution: def __init__(self): self.ans = [] # @param {integer} n # @return {inte...
阅读全文
摘要:纯递归方法, 网上有一个bit manipulation 的方法 不(看)想(不)深(大)究(懂) LOLclass Solution: def __init__(self): self.ans = 0 # @param {integer} n # @return {...
阅读全文
摘要:就是递归class Solution: # @param {TreeNode} root # @return {TreeNode} def invertTree(self, root): if not root: return ro...
阅读全文
摘要:这道题一般既可以用一个queue也可以用2个queue来解决 这里使用一个queue来解决 代码如下class Stack: # initialize your data structure here. def __init__(self): self.stack = []...
阅读全文
摘要:1,这道题如果纯用递归数点而不利用其为一个complete binary tree的话会超时。2.为了利用这个条件,比较左右两子数的高度:1, 如果相等则左子树为完全二叉树 2, 如果不等, 则右子树为完全二叉树。3,完全二叉树的node个数为pow(2,depth)-1, 因此可以不用递归数点节约...
阅读全文
摘要:思路简单 找寻重复面积, 重点是找到重复矩形的长和宽(有可能没有覆盖即为0, 这一点要注意) 代码如下class Solution: def computeArea(self, A, B, C, D, E, F, G, H): areaA = (C - A) * (D - B) ...
阅读全文
摘要:这道题就是数点 divide and conquerclass Solution: # @param {TreeNode} root # @param {integer} k # @return {integer} def kthSmallest(self, root, k)...
阅读全文
摘要:这道题首先是受到 169 Majority Element 的启发 (https://en.wikipedia.org/wiki/Boyer-Moore_Majority_Vote_Algorithm) 知道最多有2个可能的数满足条件。 而这道题不同的是无法确定是否存在, 因此得到可能的candid...
阅读全文
摘要:这个题如果面试拿出来就是要录你了 哈哈class Solution: # @param {integer} n # @return {boolean} def isPowerOfTwo(self, n): return n == pow(2, len(bin(n)) ...
阅读全文
摘要:这道题有两个思路, 一是沿用085的maximum rectangle的思路, 稍作改进即可, 代码如下, 这个方法运行192msclass Solution: # @param {character[][]} matrix # @return {integer} def maxi...
阅读全文
摘要:这道题主要是使用084的方法, 唯一要做的是处理一下输入 ,具体代码如下 复杂度O(n*n) 1 class Solution: 2 # @param {character[][]} matrix 3 # @return {integer} 4 def maximalRect...
阅读全文
摘要:这道题有两个做法 总体来说都是O(n) 但是第二个方法是第一个的简化版方法一:l[i] = max(j) 其中a[j], a[j+1], ...,a[i-1] a[i+1], ... ,a[j]dif[i] = r[i] - l[i]area[i] = a[i] * dif[i]最大的area[i...
阅读全文
摘要:暴力搜索 无压力, 只是要注意Line 14作用 如果用deepcopy则耗时多了好多 1 class Solution: 2 def __init__(self): 3 self.ans = [] 4 # @param {integer} k 5 # @pa...
阅读全文
摘要:我会说我直接用了 heapq这么无耻的方法吗 :) 这道题应该直观用heap 复杂度为O(nlgk)1 import heapq2 class Solution:3 # @param {integer[]} nums4 # @param {integer} k5 # @ret...
阅读全文

浙公网安备 33010602011771号