进军medium
zcz5566719
这个作者很懒,什么都没留下…
展开
-
Leetcode刷题全记录,每题都有长进(精选top面试系列,0-100)
引言之前已经完成了对hot100的全部题目的刷题,近期打算完成精品top面试系列的题目。剩下的题目主要都是M和H难度的,还是按照题号来刷题。29 两数相除类似于之前做过的两数相乘的题目,两数相除的思路很相近,都是利用位运算,倍增的计算。首先我们依次进行倍增运算,每次翻一倍,并用count计数。当除数大于被除数时,再开始减小,每次出现被除数大于除数,都记录当前的count。class Solution: def divide(self, dividend: int, divisor: in原创 2020-06-17 16:26:38 · 262 阅读 · 0 评论 -
Leetcode刷题全记录,每题都有长进(hot 100 438-739)
438 找到字符串中所有字母异位词一道字符串的题目,也是一类新方法的使用滑动窗口法滑动窗口算法的思路是这样:我们在字符串 S 中使用双指针中的左右指针技巧,初始化 left = right = 0,把索引闭区间 [left, right] 称为一个「窗口」。我们先不断地增加right指针扩大窗口 [left, right],直到窗口中的字符串符合要求(包含了 T 中的所有字符)。...原创 2020-04-09 23:19:43 · 325 阅读 · 0 评论 -
Leetcode刷题全记录,每题都有长进(medium 391-420)
394 字符串解码看到题目就能想到这是一个DFS题目。需要每次去搜索。这道题的dfs设计有一些巧妙之处。分析题目,本题是可以在O(n)O(n)O(n)的时间复杂度内完成的。有三个特殊的字符,数字,括号,字母。每次遇到数字时候就进入深层函数,遇到]就跳出一层。特殊之处在于,同时跳出时候应该返回之前已经搜索到了哪个坐标位置,这样可以继续搜索。并且最后一次返回时候肯定时坐标达到数组尽头,此时可...原创 2020-04-09 00:59:59 · 184 阅读 · 0 评论 -
Leetcode刷题全记录,每题都有长进(medium 331-360)
338 比特位计数算是一道经验题目,考察了位运算的思路。dp[i]为i的二进制形式的1的个数。i是奇数时,dp[i]=dp[i-1]+1,在二进制数上加了个1;i是偶数时,dp[i]=dp[i/2],因为i往左移得到的,所以1的个数没变。class Solution(object): def countBits(self, num): """ :type...原创 2020-04-07 23:50:37 · 154 阅读 · 0 评论 -
Leetcode刷题全记录,每题都有长进(medium 301-330)
309. 含有冷冻期的股票购买股票问题是一类典型的dp问题,这个链接对于题目进行了讲解。作为补充,我也整理一下自己的解题思路.因为做过类似的题目所以对采用dp思想还是明确的。由于存在两个状态,持有股票,持有现金因此要采用二维的方式。状态设定:dp表示现金存量。dp[i][1],表明在第i天持有股票的状态。dp[i][0]表明在第i天持有现金的状态。状态转移方程:由于添加了冷冻期限,只能...原创 2020-04-07 23:03:59 · 185 阅读 · 0 评论 -
Leetcode刷题全记录,每题都有长进(medium 271-300)
279 完全平方数是一道dp问题.状态dp[i]表示组成和为i最少的完全平方数的个数。状态转移方程是dp[i] = min(dp[i-j]+dp[j], dp[i])优化就在于如何合适的选择j的范围,最暴力的方法是j in (1, i),稍作优化就是j in (1, i//2),还可继续优化dp[i] = min(dp[i], 1+dp[i-j*j])其中j是完全平方数的因子。cl...原创 2020-04-07 01:05:11 · 229 阅读 · 0 评论 -
Leetcode刷题全记录,每题都有长进(medium 211-240)
215 数组中的第K个最大元素一道经典的TOP-K问题。221 最大正方形是一道在矩阵上的dp问题。问题描述中存在最大值的字眼,因此首先想到还是应该采用dp的方法。核心还是找到dp是什么,状态转移方程是什么。dp[i][j]设定为当前点为右下角时候,正方形的边长。转移方程:dp[i][j] = min(dp[i-1][j-1], dp[i][j-1], dp[i-1][j])+1c...原创 2020-04-05 00:18:46 · 143 阅读 · 0 评论 -
Leetcode刷题全记录,每题都有长进(medium 181-210)
200 岛屿数量题目思路首先想到dfs或者bfs的方法,做一个标记的地图。每次进行搜索,只要找到陆地就标记。所以我们首先以这两种搜索方式为例子练习bfs与dfs。class Solution(object): def numIslands(self, grid): """ :type grid: List[List[str]] :rty...原创 2020-04-03 21:10:58 · 169 阅读 · 0 评论 -
Leetcode刷题全记录,每题都有长进(medium 151-180)
152 乘积最大数组第一次遇到这种最大最小题目。一起的起因都是因为可能存在负数,让最小值变成最大值。解决办法是让负数出现时,最大值与最小值进行交换class Solution(object): def maxProduct(self, nums): """ :type nums: List[int] :rtype: int ...原创 2020-04-01 18:45:46 · 201 阅读 · 0 评论 -
Leetcode刷题全记录,每题都有长进(medium 121-150)
139 单词拆分一道动态规划题目,具体解析。142 环形链表一道链表的数据结构操作题目,看到环,首先想到快慢指针。只是没想到还可以这么妙用。class Solution(object): def detectCycle(self, head): """ :type head: ListNode :rtype: ListNode ...原创 2020-03-31 22:22:00 · 157 阅读 · 0 评论 -
Leetcode刷题全记录,每题都有长进(medium 91-120)
94 二叉树的中序遍历二叉树的基础遍历。不多说了96 不同的二叉搜索树这道题有点找规律。关键是找到dp的递推公式。我们以3为例,如果1为根节点,右侧剩下2,3需要分配。变成一个两个节点的问题。所以有dp[0]*dp[2]种方法。如果2为根节点,左侧有1分配,种类是dp[1],右侧只有3,种类是dp[1]。共有dp[1]*dp[1]如果3为根节点,左侧有1,2分配,种类是dp[2],...原创 2020-03-30 22:32:17 · 182 阅读 · 0 评论 -
Leetcode刷题全记录,每题都有长进(medium 61-90)
62 不同路径标准的动态规划,每一步数都可以从上一步的状态转移过来。class Solution(object): def uniquePaths(self, m, n): """ :type m: int :type n: int :rtype: int """ dp = [[0 for ...原创 2020-03-29 22:38:27 · 177 阅读 · 0 评论 -
Leetcode刷题全记录,每题都有长进(medium 41-60)
46 全排列主要算法思想还是回溯。关于回溯算法,有一个专门的专题,我会详解。这个题目属于比较入门,代码如下class Solution(object): def permute(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ ...原创 2020-03-28 23:31:48 · 131 阅读 · 0 评论 -
Leetcode刷题全记录,每题都有长进(medium 21-40)
22.括号生成比较蛋疼的题目,可以采用深度优先搜索的方法。每次在搜索时候判断,是否还可以添加(如果可以就进入子函数。第一次未做出class Solution(object): def generateParenthesis(self, n): """ :type n: int :rtype: List[str] """...原创 2020-03-28 01:13:02 · 149 阅读 · 0 评论 -
Leetcode刷题全记录,每题都有长进(medium 1-20)
leetcode刷题记录(medium,1-20)已经刷完了前200题的简单难度,现在开始尝试medium。需要记录一些好的方法和思路。对于很大的知识缺失我还是会记在专题上。2.两数之和主要需要考虑的问题是进位的问题。另外就是创建一个空节点的方法。考虑的情况:1.两个节点其中一个空,2.两个节点都空,3.两个节点都不空极端数值:[5]+[5], [1]+[9,9] 这种连续进位问题...原创 2020-03-26 22:30:33 · 333 阅读 · 0 评论