![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
学习札记
文章平均质量分 97
小柯同学_2019
想做什么,就现在,马上做~
展开
-
Leetcode刷题(32)每日一题:两个数组的交集II
一段时间没有练习代码,真就生疏了。果然代码是要天天练的。今天的题目需要使用字典,不过年代久远,基本的操作又都忘了……业精于勤荒于嬉,果然不是随便说说的。题目350. 两个数组的交集II...原创 2020-07-13 18:04:32 · 379 阅读 · 0 评论 -
Leetcode刷题(31)二叉树专题(31)二叉树专题:树的后序遍历(递归和迭代)
题目145. 二叉树的后序遍历难度:困难题目分析:如果采用递归的方法,那难度其实等于0。对于后序遍历来说,最难的其实是迭代的方法。因为后序遍历的顺序是 左-右-根,这意味着,找到最左的叶子之后,还要再往右边可能的叶子找,最后才能输出根节点位置的值。2. 解法一:递归# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x#原创 2020-06-19 17:14:13 · 258 阅读 · 0 评论 -
Leetcode刷题(30)二叉树专题:树的中序遍历(递归和迭代)
题目94.二叉树的中序遍历难度:中等题目分析:二叉树的题目基于递归的解法,跟套模板一样,都不需要怎么思考。重点在于掌握迭代的方法,这样有助于理解遍历的过程。中旬遍历,是 左 - 中 - 右的顺序2.解法一:递归# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None#原创 2020-06-19 12:48:48 · 276 阅读 · 0 评论 -
Leetcode刷题(28)二叉树专题:树的前序遍历(三种方法:递归、迭代的两种写法)
本篇重要参考资料(点此跳转)。这篇解析,不仅简单介绍了二叉树这种数据结构,还详细罗列了各种不同遍历的方法,对于我使用的教材是个很好的补充。# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def原创 2020-06-18 13:03:00 · 344 阅读 · 0 评论 -
Leetcode刷题(29)二叉树专题:求树的深度(递归、深度优先搜索、宽度优先搜索)
题目104. 二叉树的最大深度难度:简单分析:最简单的方法是使用递归,代码最少,速度也不慢;同时可以单独维持一个栈或是队列,使用深度优先搜索(DFS)或是宽度优先搜索(BFS)来得出答案。不管是使用哪种方法,所有节点都必须被遍历,才能获得答案。解法一:借助队列,宽度优先搜索# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x#原创 2020-05-24 20:22:03 · 705 阅读 · 0 评论 -
Leetcode刷题(27)动态规划专题(5):区域和检测(使用缓存加快计算速度)
题目303. 区域和检索难度:简单题目分析:解法一:class NumArray: def __init__(self, nums: List[int]): self._nums = list(nums) # 断开二者联系 def sumRange(self, i: int, j: int) -> int: return sum(self._nums[i:j+1])运行结果:解法二:class NumArray: def原创 2020-05-17 12:35:13 · 245 阅读 · 0 评论 -
Leetcode刷题(25)动态规划专题(3):打家劫舍II (考虑环形排列的房间,拆分求解)
题目213. 打家劫舍II解法:拆分房间为两个链表运行结果:原创 2020-04-11 19:32:08 · 362 阅读 · 0 评论 -
Leetcode刷题(24)动态规划专题(2):打家劫舍(特殊限制的字符串和)
题目198. 打家劫舍难度:简单题目分析:现在对于动态规划,我开始能依葫芦画瓢写出解答代码,不过这中间的正确性,对于我来说还是有点难度。依据动态规划的解题步骤,我们首先定义 dp 数组的含义。此处定义 dp[i]表示到达位置i, 小偷所能偷到的最大和相应的递推公式:dp[i]=max(dp[i−1],dp[i−2]+nums[i]),dp[i] = max(dp[i-1], dp[...原创 2020-04-07 12:38:19 · 185 阅读 · 0 评论 -
Leetcode刷题(23)动态规划专题:最大子序和
题目解法一:暴力搜索,超时class Solution: def maxSubArray(self, nums: List[int]) -> int: # 尝试一个个加 if len(nums) == 0: return 0 row = len(nums) mini = 0...原创 2020-04-07 10:12:42 · 259 阅读 · 0 评论 -
Leetcode刷题(22)动态规划专题:爬楼梯(重新包装的斐波那契数列,动态规划使用三部曲总结)
题目70. 爬楼梯难度:简单题目分析:这道题是动态规划系列的第一个例题,因此,这里总结下使用动态规划的三部曲。1. 定义数组 dp[n] 的含义,这个根据具体题目来赋予含义, 这道题是 台阶 n 拥有多少种走法2. 找出更新数组的递归公式,比如这题是 dp[n]=dp[n−1]+dp[n−2]dp[n] = dp[n-1]+dp[n-2]dp[n]=dp[n−1]+dp[n−2]...原创 2020-04-03 16:47:49 · 231 阅读 · 0 评论 -
Leetcode 刷题 (21)堆栈的应用:字符串处理技术(分类有序,避免冗余,递归解法,O(n)复杂度)
题目394. 字符串解码难度:中等(这道题花了我好长时间,最后是修修补补才做出来……如果是简单题,我就哭了)题目分析:这道题,由于每次读取一个字符,大部分时候不能马上确定最后的形式,因此,需要借助缓存结构;而由于中括号“[ ]”有嵌套(如“3[a2[c]]”,得先转换成“cc”, 在跟“a”拼接),后读取的要先处理,因此选择栈来辅助存储。于是,剩下的问题便是怎么使用栈来存储数据的问题,应...原创 2020-04-03 13:27:14 · 205 阅读 · 0 评论 -
Leetcode刷题(20)栈和队列的基本应用:用队列实现栈
题目225. 用队列实现栈难度:简单题目分析: 这题主要考察对于栈和队列性质的理解,他们的本质不同就在于元素进入和弹出的顺序,完全相反。栈是 Last In First Out (LIFO), 队列是 Fisrt In First Out (FIFO), 实现起来有点变扭。解法:class MyStack: from collections import deque ...原创 2020-04-02 17:10:47 · 200 阅读 · 0 评论 -
Leetcode 刷题 (19):堆栈和队列应用:图像渲染(简单版的数岛屿)
733.图像渲染难度:简单题目分析:这道题是容易版的数岛屿(数岛屿详细解析戳这里传送门)。简单的地方在于,对于岛屿题目,我们是不清楚“1” 会出现在什么地方,所以需要构建一个双层循环,遍历矩阵每一个点;而这道题,直接给了起点,所以我们把周围一片找出来即可。1. 解法一: 递归实现的DFSclass Solution: def floodFill(self, image: Li...原创 2020-03-31 21:14:10 · 232 阅读 · 0 评论 -
Leetcode刷题(18)栈的应用:钥匙和房间 (深度分析堆栈使用的易错点)
题目841. 钥匙和房间难度:中等题目分析:解法一:我自己想的,兜圈了……class Solution: def canVisitAllRooms(self, rooms: List[List[int]]) -> bool: # 基于栈的探索可以解决,反正就是一个个试 # 建立一个答案数组,没探索的标1, # 等栈探索完,...原创 2020-03-31 16:14:26 · 410 阅读 · 0 评论 -
Leetcode刷题(17)队列的应用:01矩阵(寻找最短路径问题,BFS应用,动态规划最优解法)
题目542. 01矩阵难度:中等(很高兴,现在leetcode关于栈和队列的中等题,我拿到手,都有思路了,也能做出来,博客没有白总结~)题目分析:从非零的数往四周探索,找到的第一个零,记录下此时的步数,如果是使用广度优先搜索(BFS), 那找到的这个,便是最近的距离;不过缺点也很明显,每一次到一个新的非零的位置,都要重复进行一样的工作,而且麻烦的是,之前的结果,不能被有效利用。下面是我基...原创 2020-03-30 08:56:46 · 1086 阅读 · 0 评论 -
Leetcode 刷题(16)卡牌分组:朴实的求解方法(Reduce函数使用和基于字典的数字统计)
题目914. 卡牌分组难度:简单(对我来说一点也不……)题目分析:卡牌分组,要求每个组里的数字一样,而且每个组的卡牌数一样多因此,这道题需要预先统计卡片有多少个数字,每个数字有多少张牌再往下推论,可以发现,题目需要找的数字 X 应为每种数字个数的公约数,这样每种数字才有可能根据 X 分成一堆堆。1. 错误解法:这种类型的题,其实就考察一个点,这里是求一堆数字的最大公约数...原创 2020-03-28 16:15:47 · 290 阅读 · 0 评论 -
Leetcode 刷题 (14) 队列和堆栈应用实例:目标和(吐血整理 01背包问题、动态规划易错点,深度分析)
题目494. 目标和难度: 中等题目分析:这道题第一眼,竟然不知道如何下手……说明我对于BFS和DFS的掌握还不扎实。最后是看了答案才有点明白,这个问题其实就是背包问题的变形……于是,直接的解法是使用递归的方法来实现DFS,或者我们自己维持一个栈来编写非递归的解法;自然,这里也可以使用BFS,因为题目需要我们找出所有解,这两种方法只是前进方向不一样。另外值得一提的是,这个方法也能使用动...原创 2020-03-27 16:21:40 · 396 阅读 · 0 评论 -
Leetcode刷题(15)堆栈的应用:求每日温度(最快解法)
题目739. 每日温度难度:中等题目分析:用一个列表来保留数据,温度的索引,因为有了索引,我们也能获得温度;建立一个跟温度对应的答案列表栈顶元素跟新元素比较,如果小于,就弹出栈顶元素;此处要持续比较,要确保栈里元素从大到小排列栈顶元素和新元素,两个索引相减,就是对应的天数,填入栈顶元素对应的位置如果小于栈顶元素,就入栈解法一:粗略版,细节没有优化class Solutio...原创 2020-03-27 10:15:55 · 161 阅读 · 0 评论 -
Leetcode 刷题(13)队列和堆栈应用实例:求岛屿数量(三种解法)
题目200. 岛屿数量难度 : 中等题目分析:对于岛屿的定义是,周围被一圈 “0” 包围,观察例子可以发现,在扫描矩阵的时候,只要发现一个“1”, 就能确定找到一个岛屿。这道题的关键在于,如何把找到的“1”周围相连的“1”都找出来,并进行标记,从而跟另外可能存在的岛屿分开。 基于一个已有的点,向四周搜索的过程,固定有两种策略,一个是深度优先搜索(DFS), 一个是广度优先搜索 (BFS...原创 2020-03-21 19:52:59 · 322 阅读 · 0 评论 -
Leetcode 刷题(12)队列应用:广度优先搜索求完全平方数
题目63. 完全平方数难度:中等题目分析:找一个和的可能拆分,在不清楚数学解析解的时候,就是一个状态空间搜索的问题。对于搜索问题,有两种策略。一种是广度优先搜索,即BFS;另一种是深度优先搜索,即DFS。这里答案是需要我们找到个数最少的拆分,所以,用广度优先搜索是最合适的策略。使用深度优先搜索,只能是找到所有解后,从中确定最优解。这道题不要求我们写出拆分方式,只要个数,所以,最合适的是B...原创 2020-03-18 21:53:25 · 155 阅读 · 0 评论 -
Leetcode 刷题 (11) 队列:设计循环队列
题目:622. 设计循环队列难度: 中等题目分析: 看下面代码实现。参考的是裘宗燕的《数据结构与算法:Python语言描述》。此处不建议使用python内置的list的append, pop操作,使用了就违背设计循环队列的初衷:消除代价为O(n)的出队操作。解法:class MyCircularQueue: def __init__(self, k: int): ...原创 2020-03-10 15:20:49 · 311 阅读 · 0 评论 -
Leetcode 刷题 (9)简单单链表:奇偶链表
题目328. 奇偶链表难度: 中等题目分析: 使用原地算法,也就是不使用额外的储存空间,仅借助于额外的指针,同时遍历有限次链表完成。解答:# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.ne...原创 2020-03-08 16:28:35 · 296 阅读 · 0 评论 -
Leetcode 刷题(8)简单单链表: 删除链表倒数第N个元素
题目19. 删除链表的倒数第N个节点难度: 中等题目分析: 链表中的题目,指针相当于免费资源,可以根据需要增加。双指针法、快慢指针法在环形链表,应用很多。解法一:# 对于这种题目,循环结束条件设为快指针到达最后一个元素即可,然后倒数第几个元素,就让慢指针慢几步就好。 # 增加头部,是为了统一删除元素的代码 temp_head = Lis...原创 2020-03-08 12:33:36 · 337 阅读 · 0 评论 -
Leetcode 刷题(7)简单单链表:确认相交链表
题目:160. 相交链表难度:简单题目分析:如果没有存储空间限制,可以把其中一个链表存到集合 set() 里面,然后再遍历另一个链表,看是否有节点在集合里面。巧妙点的方法是使用两个指针。 如果两个链表有相交,那么后面的整个部分,长度是相同的,所以,如果能消除不相交的部分的长度差,那它们之后肯定可以同时到相交点。方法很简单,每个指针都走一遍两个链表!方法一:使用额外空间# De...原创 2020-03-08 00:31:37 · 161 阅读 · 0 评论 -
深度学习笔记(3)基于Tensorflow的多元线性回归:预测波士顿房价
问题描述原创 2020-03-07 21:53:50 · 1056 阅读 · 1 评论 -
Python科学计算学习:从入门到放弃系列(5)numpy
摘要第一遍看下来,很多操作,不容易记住,于是,最好的方法,是写博客,记录下来。原创 2020-03-07 14:30:34 · 179 阅读 · 0 评论 -
Leetcode 刷题(6)简单单链表:找环形列表入口
题目142. 环形列表II难度: 中等题目分析:使用额外空间,是最简单的方法,联系上一篇博客判读环形列表 使用额外空间的分析,在确认了有环的同时,第一个重复点,就是环的入口。这道题同时有个非平凡的解法,基于使用快慢指针的解法,然后多定义两个指针,即能找到入口。详细的图解和分析点这里解法一: 使用额外空间# Definition for singly-linked list....原创 2020-03-03 20:18:51 · 220 阅读 · 0 评论 -
Leetcode 刷题(5)简单单链表:反转链表
题目Leetcode 206: 反转链表难度: 简单题目分析:这道题能充分体现链表相对list的优势,把链表反转,只需要调整链表指向,而不需要移动元素。建立一个新链表,每次从旧链表拿下一个元素,插入新链表的头,这个操作的代价均是O(1), 效率高解法一:建新表# Definition for singly-linked list.# class ListNode:# d...原创 2020-03-03 19:47:05 · 197 阅读 · 0 评论 -
Leetcode刷题(4)简单单链表:判断链表是否有环
题目Leetcode 141. 环形链表难度: 简单题目分析: 两种解法。一种是使用快慢指针的方法,快指针移动速度是慢指针的两倍,这样,如果链表有环,快指针一定会从后赶上慢指针。这种解法空间复杂度是O(1), 时间复杂度是 O(n)。一种是借助python内置集合类型 set() 进行节点存储,发现了两个一模一样的节点,就能说明链表有环,同时,第一个重复的节点,也是这个环的入口。...原创 2020-03-03 18:37:29 · 285 阅读 · 0 评论 -
Leetcode 刷题(2)简单单链表:删除重复元素
链表删除元素后,注意不需要再调用 p = p.next, 因为 p.next = p.next.next, 已经更好了p.next了!原创 2020-02-28 22:25:42 · 196 阅读 · 0 评论 -
Python 编程技术学习(1)函数装饰器
摘要类似于C# 里面的委托扩展已有函数的功能例子,在微信中扩展函数使用原创 2020-02-28 21:44:26 · 236 阅读 · 0 评论 -
Leetcode 刷题(3)简单单链表:定义一个单链表数据结构
题目解答class LNode(): def __init__(self, val, _next = None): self.val = val self.next = _nextclass MyLinkedList: def __init__(self): """ Initiali...原创 2020-02-28 19:09:21 · 509 阅读 · 0 评论 -
深度学习笔记(2) 基于Tensorflow的线性回归 拟合散点图
前言B站作为新兴的学习平台,果然名不虚传,在上面搜索到了浙江大学城市学院的深度学习教程,特别好上手,于是,短短的几个小视频后, 让我对 Tensorflow 很快就有大概的了解,也能马上码代码上手。...原创 2020-02-28 18:32:17 · 1304 阅读 · 0 评论 -
深度学习笔记(1)
写在前面这个笔记的定位是日常学习后的反思总结,主要是为了帮助我掌握学习到的知识。所以,内容会很零碎。不过,每学习一个完整模块,会有相应的总结。立个Flag, 这个系列很可能坚持不到3月份。内容摘要今天重新翻开吴恩达的入门课程,神经网络和深度学习,继续之前关于双层神经的学习,整个第三周的课程,内容是基于 logistic模型,推广到有一个隐藏层的双层神经网络,这里面核心就是正向网络输出计算和...原创 2020-02-24 21:54:51 · 333 阅读 · 0 评论 -
算法学习(11)数学问题求解系列(8)素数求解(多种方法比较)(结尾有彩蛋~)
前言提纲都是比较 10万以内的查找速度常规方法def findPrimeNum(maxLimit): primeNunList = [1]*maxLimit # 创建与待研究范围一样的数组; 一开始假设都是,因为排除合数比挑出素数简单,排除只需要一个整除即可! for num in range(2, maxLimit): # 全部数都要遍历一遍 fo...原创 2019-04-12 12:50:03 · 382 阅读 · 1 评论 -
算法学习(10)数学问题求解系列(7)由亲密数问题启发的运行效率问题讨论(值得一看)
前言这一篇会探讨 while 循环 和 for 循环,二者的运行效率竟然不一样!同时,会把之前一些遗漏的知识点补齐。原创 2019-04-08 22:15:33 · 322 阅读 · 0 评论 -
算法学习(9)数学问题求解系列(6)自守数(普通解法及拓展)
前言自守数也是一个很容易用编程解决的数学问题,不过,教材提到的一个点,值得深入研究。问题计算指定范围内的所有自守数名词解释自守数,指一个数平方结果的后几位,等于这个数本身。如 25×25=62525\times25=62525×25=625, 625625625的后两位等于乘数25,所以是一个自守数。编程思路很容易发现,一个数是几位数,那么就得截取乘积的后几位数,所以,得编写确定一...原创 2019-04-07 22:36:27 · 1061 阅读 · 0 评论 -
算法学习(8)数学问题求解系列(5)水仙花数
前言水仙花数,问题非常直观也非常简单,直接根据问题表述写程序即可,不用考虑优化问题。问题水仙花数,是一个三位数,它的数值等于各个位置的数字的立方和,如153=13+53+33153 = 1^3+5^3+3^3153=13+53+33 ,求出所有3位数的水仙花数。编程思路把数numnumnum的每一位单独提取出来比较实现代码#!/usr/bin/env python# -*- ...原创 2019-04-06 23:09:42 · 598 阅读 · 0 评论 -
算法学习(7)数学问题求解系列(4)求解完数(升级版,速度瞬间提升)
前言在上一篇讨论亲密数加速版本(传送门)的博客中,对求因子和的函数进行了改造,即for循环的范围,从n/2+1n/2 +1n/2+1 改为 n+1\sqrt{n}+1n+1,程序的运行立马有了n\sqrt{n}n的提升。由于亲密数的第一步求因子和,正是求完数的主要步骤,所以,如果在完数程序中,尝试加速程序,会有什么效果呢?更新的代码import timeimport math# ...原创 2019-04-05 23:20:27 · 327 阅读 · 0 评论 -
算法学习(6) 数学问题求解系列(3)亲密数(开挂加速版,必看)
前言上一篇博客介绍了亲密数的常规解法(点击传送门回顾)。这篇介绍的算法,运用了空间换时间的编程思路,极大的缩短了程序的运行时间。加速思路求解10万以内的亲密数,也就是,从2到10万,每一个数肯定是都要求因子和,这一步省不了,依然要求上一个解法中,我们每求一个因子和后,把它当成新的数,再求一次因子和,这就相当于我们把2到10万,又求了一次因子和,自然时间就很长了于是,假如我们把第1步,求...原创 2019-04-05 15:46:25 · 687 阅读 · 0 评论