自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 LeetCode 算法题库【1518】——换酒问题

换酒问题题目描述:题目链接Python3class Solution: def numWaterBottles(self, numBottles: int, numExchange: int) -> int: drink = 0 Full = numBottles Empty = 0 while True: drink += Full Empty += Full

2021-12-17 22:44:44 288

原创 LeetCode 算法题库【210】——课程表Ⅱ

课程表Ⅱ题目描述:解题思路:第一种:广度优先搜索。这个方法和之前的 课程表Ⅰ 里的很像。都用到了拓扑排序。主要的思路也是建立入度表和邻接表,将入度为0的边依次append到res中。然后再对res进行遍历,将其每个结点的邻接结点入度减一,如果入度变为0,则加入res中。最后的判断和上次的也很类似,我们设置一个出队个数参数temp,每次遍历都会加1,最后如果出对个数等于课程次数,则返回res,否则,说明形成了环,则不可能完成所有课程,即返回空数组[]。时间复杂度:O(N + M)class

2020-05-15 23:03:47 244

原创 LeetCode 算法题库【207】——课程表

课程表题目描述:解题思路:Python3第一种:这个方法就是先将这所有的匹配用字典的方式储存,然后按照入度依次移除没有先修课程的课,即没有入度的节点。然后每次学完之后都要通过remove删除。最后当某个课程的先修课程全部学完了,则这个课程就要从字典中删除,然后它就会变成没有入度的结点,后续也会删除。最后就看列表中是否还有没修完的课,如果全部修完,也就是列表为空,即返回True,否则返回Talse。时间复杂度:O(N^3)class Solution: def canFinish(

2020-05-15 20:20:22 374

原创 LeetCode 算法题库【236】——二叉树的最近公共祖先

二叉树的最近公共祖先题目描述:解题思路:第一种:分治递归。这道题解题的关键就是通过遍历找出这两个结点,然后找到这个公共祖先root。这里我们的思路就是分别判断这个结点的左右子树,如果在左右子树都找到了p和q则这个结点就是最近的公共祖先了。时间复杂度:O(N)class TreeNode: def __init__(self, x): self.val = ...

2020-05-06 16:27:57 226

原创 Python 爬虫编程实践 Task【4】——实战

一、爬取news用selenium打开模拟界面import timefrom selenium import webdriverdriver = webdriver.Chrome('C:\\Users\dell\Python 爬虫 Study\chromedriver.exe')driver.get('https://news.qq.com/')driver.maximize_win...

2020-04-28 10:07:39 328

原创 Python 爬虫编程实践 Task【3】——IP代理,Selenium,Session和Cookies

目录一、IP代理1、如何获取代理IP地址2、如何解决IP被封3、关于http和https代理二、Selenium1、selenium准备工作2、使用selenium的基本步骤三、Session和Cookies1、动态网页和静态网页http1.02、session和cookies3、爬虫实战:模拟登录163邮箱四、爬虫项目实践:爬取丁香园数据五、备注一、IP代理1、如何获取代理IP地址从该网...

2020-04-25 23:33:34 483

原创 Python 爬虫编程实践 Task【2】——BeautifulSoup库入门,Xpath,正则表达式 re

目录一、BeautifulSoup库1、BeautifulSoup的概念和导入2、BS4库的基本元素3、基于BS4库的HTML内容遍历方法4、基于BS4库的HTML内容的查找方法5、BS库爬虫实战:中国大学排名定向爬取二、Xpath1、Xpath常用的路径表达式:2、使用lxml解析3、Xpath爬虫实战:爬取丁香园-用户名和回复内容三、正则表达式 re1、为什么使用正则表达式?2、正则表达式语法...

2020-04-23 23:52:35 1268

原创 Python 爬虫编程实践 Task【1】——HTML互联网,requests使用,API使用,JavaScript语言

目录一、HTTP和HTML1、HTTP和互联网2、HTML网页基础1)网页组成2)网页结构3)HTML DOM4)CSS5)检查网页二、requests使用1、requests.get2、request.post3、爬虫进阶实战:爬取豆瓣电影Top250三、API使用四、JavaScript语言1、JavaScript 语言1)JavaScript语言的特点2)如何使用JavaScript3)Ja...

2020-04-21 23:43:49 493

原创 LeetCode 算法题库【137】——只出现一次的数字Ⅱ

只出现一次的数字Ⅱ题目描述:解题思路:python3第一种:排序查找法。这个方法是根据原先的那道题:只出现一次的数字Ⅰ,进行稍微的改进,方法和思路都是一样的,可以参考。唯一的改变就是,之前的题目中,相同数字的出现次数为2次,而这次是3次,所以我们排完序之后,只需要每隔3位进行查找,就能很快锁定这个唯一的数字。时间复杂度:O(N)class Solution: def s...

2020-04-19 23:07:51 181

原创 LeetCode 算法题库【89】——格雷编码

格雷编码题目描述:解题思路:python3第一种:位运算法。首先我们需要了解格雷编码是个什么东西:格雷编码(循环二进制单位距离码)是任意两个相邻数的代码只有一位二进制数不同的编码。这道题我们可以通过二进制遍历,为了保证相邻的数的二进制编码不同的只有一个,我们通过位运算符^(异或),这个位运算符的详细解释可以看这篇教程:运算符,这里就不多说。我们通过自己和自己右一位进行异或运算,最后...

2020-04-19 19:50:39 192

原创 LeetCode 算法题库【78】——子集

子集题目描述:解题思路python3第一种:层次迭代。我们很容易能从子集中找出规律,首先定义最终子集res_subset为[[]],也作为首层,然后将nums从头开始遍历,每遍历一次就到下一层,举例比如nums = [1,2,3],然后根据首层的集合只有一个空集,也就是数目为1,将这个集合都加上nums[0],也就是nums的第一个数,就变成了[1],再放回res_subset中,此时...

2020-04-19 17:40:08 191

原创 LeetCode 算法题库【136】——只出现一次的数字

只出现一次的数字题目描述:解题思路:python3第一种:遍历验证法。首先看到这题,我们需要找到那个唯一的只出现一次的数字,而其他的数字都是只出现了两次,那么我们如果一个一个的去数组里找是否有重复的,这样时间复杂度会很大,所以我们要想如何更加简单的找出唯一的只出现一次的数字。首先我们需要排序,因为如果不排序,那么假设你找到第一个数字1,那么你要找到第二个1是很麻烦的,为了方便比较这个...

2020-04-09 18:53:47 245

原创 LeetCode 算法题库【344】——反转字符串

反转字符串题目描述:解题思路:python3第一种:遍历替换法。这道题的思路很直接,我们就是将这个列表的字符反转过来,也就是头元素和尾元素交换,然后次元素和次尾元素交换,以此类推,我们通过所学数学的知识,可以很容易得到规律,通过遍历前一半的元素,依次完成换位,最后得到答案。我们需要注意的是这里可能大家会考虑奇偶数的问题,这一点我一开始写遍历是分了两种情况来写,但是我们发现用整除可以简...

2020-04-06 22:26:53 150

原创 LeetCode 算法题库【44】——通配符匹配

通配符匹配题目描述:解题思路:第一种:递归。按照顺序,依次判断是否为*,因为*能代表多个不同的字符。每次判断完p都会通过切片的方式去掉判断完的字符,然后进行递归。最后剩下最后一个字符的时候判断是否为*,如果是则直接返回True,如果不是,则要判断最后这个字符和s[0]要对应相等或者最后一个字符为?。因为这个方法函数调用过深,会超时,所以需要换一种方法。class Solutio...

2020-03-30 23:48:17 1419

原创 LeetCode 算法题库【239】——滑动窗口最大值

滑动窗口最大值题目描述:解题思路:第一种:暴力法。这个思路就很好理解,从头开始遍历,用切片取每次的k个元素作为滑动窗口然后把最大值直接append给最后需要返回的最大值集合max_number。非常暴力所以速度比较慢。时间复杂度:O(N)class Solution: def maxSlidingWindow(self, nums: List[int], k: int) ...

2020-03-30 21:15:31 283

原创 LeetCode 算法题库【641】——设计循环双端队列

设计循环双端队列题目描述:解题思路:C#我们可以首先定义这几个私有的量,定义队列,头尾指针,队列的长度和总长度。然后后面就很好写了,我们可以先写最后的IsEmpty和IsFull函数,这两个就是判断是否为空和是否队列已满,只需要返回长度为0和长度为最大长度即可。中间的这些函数,每次都要判断是否为空和是否队列已满。public class MyCircularDeque{ ...

2020-03-30 17:16:58 171

原创 LeetCode 算法题库【134】——加油站

加油站题目描述:解题思路:第一种:贪心算法。这道题通过读题很好发现一个特点,就是如果总的汽油量小于总的耗油量,那么是完全不可能绕一周的,所以这样的情况下,直接返回-1。从头开始遍历,到第i个加油站时,若剩余的油量小于消耗的油量,则不能到达下一站,而且无论从i之前的哪一个加油站开始出发,都不能到达i+1站,所以,每次出现这种情况的时候,都要从i+1开始,若从这里开始能达到最后一个加油站,...

2020-03-29 20:15:18 363

原创 LeetCode 算法题库【55】——跳跃游戏

跳跃游戏题目描述:解题思路:第一种:贪心算法。这道题用贪心算法可以很快解决,首先我们定义max_location作为我们能够达到的最远距离的所需步数,我们只要能够判断这个步数大于要到达这个数组末尾的步数,就可以认为跳跃游戏成功。我们设了temp来保存数组中每个位置能够跳跃的最大步数,当然这里容易出现一个错误,就是我们容易只顾着后面忘记了前面,我们要保证当前的位置通过之前的步数能够到达,不...

2020-03-28 22:08:42 335

原创 LeetCode 算法题库【455】——分发饼干

分发饼干题目描述:解题思路:第一种:贪心算法简陋版。我们可以先将这两个列表进行排序,然后同时从头开始遍历查找,优先满足那些数字小的,也就是胃口更小的小朋友,所以从小到大,只要存在s中有大于等于g的元素,说明这个元素就可以满足条件,就给child_number加一,然后将数组s用切片方法截去j元素及之前的元素。方法比较暴力,所以时间复杂度比较大。时间复杂度:O(NM)class S...

2020-03-27 21:55:40 199

原创 LeetCode 算法题库【392】——判断子序列

判断子序列题目描述:解题思路:第一种:顺序查找。当我看到这个题,我的想法是,能不能将要找的字符串s的每个字符,在长字符串t中依次来查找,因为一定要按照原字符串s的顺序来,所以每当我们找到一个字符,就把这个字符之前的所有字符去掉(包括这个字符),然后再继续往下查找,以此类推。这样就变得简单了,下面实现这个思路,我们可以通过迭代的方式依次判断每个字符是不是在t中,这里s[i]在t中的第一次出...

2020-03-26 20:01:26 300

原创 LeetCode 算法题库【7】——整数反转

整数反转题目描述:解题思路:第一种:算是暴力法把,也没有什么过多的花里胡哨,这个题目的思路非常明确,也很简单,就是把数字反转,带负号的要保留,如果反转后开头数字是0则要去除。根据这些所需条件,就很容易能写出代码。对于反转整数,这里我第一想到了用字符串的方法,将这个数字转成字符串的形式,然后取绝对值将符号去掉(方便反转),用字符串切片的方法,也就是num[::-1],来将字符串反转,从而...

2020-03-26 01:56:37 150

原创 LeetCode 算法题库【99】——恢复二叉搜索树

恢复二叉搜索树题目描述:解题思路:第一种:递归思路。对于树的题几乎都可以通过递归来实现,那么这道题我们还是使用递归的方法来解。这一题从题目中可以get到信息点就是错误的只有两个数字,我们只需要找到这两个数字然后换位置就可以了,那现在的问题就是要怎么找到这两个数。这道题我还是和前几期题目一样,设置了一个函数来进行递归。首先,时间复杂度:O(N)class TreeNode:...

2020-03-24 23:37:40 170

原创 LeetCode 算法题库【95】——不同的二叉搜索树 Ⅱ

不同的二叉搜索树 Ⅱ题目描述:解题思路:第一种:递归方法。首先我们先了解这个二叉搜索树。对于这道题,我们要通过给的n来找出所有的二叉搜索树,那么我们可以从1到n每个数都要看它的左边和右边的数可以构成多少二叉搜索树,根据二叉搜索树的性质,也就是要保证左边的数要小于右边的数,满足条件就通过递归方法找到同样满足条件的左子树和右子树,然后将这个满足条件的二叉搜索树放入要输出的result中。我们...

2020-03-23 23:55:18 116

原创 LeetCode 算法题库【150】——逆波兰表达式求值

逆波兰表达式求值题目描述:解题思路:第一种:迭代遍历。这道题难度并不是很大,考验的是我们熟练掌握栈的方法来解决四则运算的问题。思路就是我们先从头开始遍历字符串,如果遇到数字,那么就先放入栈中,当我们第一次遇到四则运算符号时,我们就将前两个元素pop出来,这里则将栈顶两个元素pop出来就很方便,体现了栈的思想方法。之后就进行分类讨论,每一种运算符对应的运算写出来,然后将这个结果再次放入栈...

2020-03-23 02:31:09 194

原创 LeetCode 算法题库【155】——最小栈

最小栈题目描述:解题思路:第一种:辅助栈法。这个方法就是按照给的要求,我们先定义两个栈stack和min_result,然后一个一个函数来编写。先是push函数,这里我们要做的就是将元素x放入栈stack中,但是我们还要考虑的是还有一个函数时需要我们返回最小元素的,所以在这里要做上铺垫,我们将该元素放入查找最小元素的栈min_result中,而且为了找到最小的,我们还要做比较,将最小的那...

2020-03-23 01:23:37 148

原创 LeetCode 算法题库【94】——二叉树的中序遍历

二叉树的中序遍历题目描述:解题思路:第一种:递归。又是递归,可以发现很多题都可以用到递归的思路…。二叉树的中序遍历,这里不太了解的可以看看这个博客:二叉树遍历,总结了二叉树的所有遍历情况。这道题所说的中序遍历,就是按照这个顺序:左子树—> 根结点 —> 右子树的顺序来遍历的。那么递归就很好写了,我还是设了一个函数TraverseTree来递归,然后还定义了一个数组result...

2020-03-22 21:26:26 168

原创 LeetCode 算法题库【104】——二叉树的最大深度

二叉树的最大深度题目描述:解题思路:第一种:递归。这个思路应该说是最容易想到的了。我是设了另一个函数来递归计算这个最大深度。我们分几种情况来讨论,首先先排除掉这两个特殊情况:如果二叉树为空,返回0,如果二叉树只有根节点,也就是没有任何子节点,返回1 。然后我们需要想,如果这棵二叉树的某个结点有左右两个子节点,那么,下一次递归我们对这两个子节点都要递归一次,然后取其中递归最深的那次深度,因...

2020-03-21 19:41:05 176

原创 LeetCode 算法题库【101】——对称二叉树

对称二叉树题目描述:解题思路:第一种:递归方法。这道题应该说比较容易想到的就是递归的方法,为了方便比较判断,我新定义了一个函数CompareTree,我们将在这个函数里判断这个树是否为对称二叉树,首先我们将树的头节点的两个根节点放入比较,如果满足了对称的条件,就依次将这两个根节点的下两个根节点放入递归函数中继续判断,只有全部通过,也就是最后的两个节点都为Null,才会返回True。时间...

2020-03-20 21:47:44 179

原创 LeetCode 算法题库【100】——相同的树

相同的树题目描述:解题思路:第一种:递归。对于树这个概念我们需要先有所了解,两个树要相同,必须是树的每个节点和顺序都要一样,缺了多了都不对。所以我们通过递归的方法来依次解决这个树问题。这里我们分三种情况:1)当树p和树q都为空 。2)树p和树q都不为空。3)树p和树q不全为空。第一种情况很明显,两个都是空的肯定是相等的,所以返回True。第三种也很明显,一个为空,一个不为空,肯定是不相...

2020-03-19 19:47:15 151

原创 LeetCode 算法题库【10】——正则表达式匹配

正则表达式匹配题目描述:解题思路:第一种:动态规划。这个方法的思路就是通过判断dp[i][j] ,也就是s的前i项和p的前j项是否匹配。后面的dp[a][b]中的a和b就是在这两个字符串中的位置。先定义一个dp,全部放入False。先使得dp[0][0] = True这样可以避免两个字符串都为空的情况,这种情况是可以匹配的。然后我们要明白几点,首先就是*是和它之前的那个字符有关,也就...

2020-03-18 23:50:13 235

原创 LeetCode 算法题库【5】——最长回文子串

最长回文子串题目描述:解题思路:第一种:这个思路是,我们可以通过从字符串子串的中心而不是起点来向两边同时扩散寻找回文子串。首先是排除特殊的s为空或者字符数目为1的情况,然后时间复杂度:O(N^2)class Solution: def longestPalindrome(self, s: str) -> str: def expand(l,r): ...

2020-03-17 23:52:18 187

原创 LeetCode 算法题库【3】——无重复字符的最长子串

无重复字符的最长子串题目描述:解题思路:第一种:这个方法也是很无脑,暴力法解决,所以运行速度就很慢。我的想法就是从头开始一点一点遍历,找到所有可能,然后把每次的长度都存进数组Sum,中,最后就求这个Sum中的最大元素。运行速度也是特别的慢,所以需要改进方法。时间复杂度:O(N^2)class Solution: def lengthOfLongestSubstring(se...

2020-03-16 22:39:44 243

原创 LeetCode 算法题库【20】——有效的括号

有效的括号题目描述:解题思路:第一种:我第一眼看这个题的想法就是,要形成括号,必须有挨着的括号,然后在这个括号外面增加括号也必须有相对对称的原则,意思就是说比如在()外面增加括号,那么要么就是在左边,右边,或者括号中间增加完整的括号,也就是类似{}([])[]的情况,要么可以{[()]}。所以我用的这个方法就是从头开始遍历,发现一个左括号就放进一个list中,然后看看下一个是不是左括号...

2020-03-15 18:38:45 149

原创 LeetCode 算法题库【14】——最长公共前缀

最长公共前缀题目描述:解题思路:第一种:这个思路比较容易想到,我们可以发现,我们需要找这些字符串的相同前缀,那么这个前缀所含有字符的最大数目取决于所给字符串集中最小的那个字符串。所以,为了避免做些不必要的多余的运算增大时间复杂度,我们就直接按照这个最小字符串的字符数量来进行遍历对比。这里先求出了字符串的数量,然后通过for循环将所有的字符串的数量放到一个数组里,然后很容易求得最小的字符串...

2020-03-14 21:05:06 296

原创 LeetCode 算法题库【13】——罗马数字转整数

罗马数字转整数题目描述:解题思路:第一种:暴力法。也不难理解,我们从这个罗马数字转整数可以找到规律,只要是当前这一个字母小于后一个字母,那么就要减去这个字母所代表的数,反之,则直接加上这个数,就比如LXIV,前面的L和X都是大于后一个字母,那么到I这里,I是小于V的,那么这里的计算步骤就是减去I,再加上V。根据这个规律,我们能很容易写出下面的代码。先将所有的已知罗马数字代表的数都放入字...

2020-03-13 20:10:37 164

原创 LeetCode 算法题库【23】——合并K个排序链表

合并K个排序链表题目描述:解题思路:第一种:这个方法比较暴力,思路也很简单。就是把全部的链表都合成一个链表,然后对这一个链表进行排序,这样就把问题大大简化了。我们用p来存放结合后的链表,通过for和while循环将lists的元素一个一个放入p中。然后排序,并放入新的链表中返回。时间复杂度:O(NlogN)# Definition for singly-linked list.#...

2020-03-12 19:38:34 234

原创 LeetCode 算法题库【19】——删除链表的倒数第N个节点

删除链表的倒数第N个节点题目描述:解题思路:第一种:这个方法用到了双指针,方法也很简单,我们通过for循环和a = a.next使得a链表往后走n个位置,这样的话a和b就相隔n个位置。这里如果a已经走完了,说明这个链表倒数n个位置就是这个链表的表头,那么则直接返回head。如果a没有走完,那么很明显这里因为a和b隔着n个位置,那么等到a到达了链表的尾部,则b就是处于距离链表尾部n个位置的...

2020-03-11 23:33:05 132

原创 LeetCode 算法题库【2】——两数相加

两数相加题目描述:解题思路:第一种:这个方法是比较常规的方法,没有什么花里胡哨。一开始也是先定义头结点,然后对p进行修改。然后进行迭代,然后用temp来表示往后进位的数,再加上前面链表里的对应元素,也就是Sum,再对10 取余,得出来的结果放到p.next,然后从p.next开始找下一位数,以此类推。算到链表最后,如果说temp仍然是大于零的,说明Sum大于10,要进位,所以链表p最后元...

2020-03-11 16:39:45 193

原创 LeetCode 算法题库【141】——环形链表

环形链表题目描述:解题思路:第一种:这个方法思路也很简单,也很容易想到,我们先设了两个指针Front和Back,都指向链表的头部head,然后开始迭代,Front每次走两步,然后Back每次走一步,这样的话两个指针每次的距离差距都会 +1,如果说链表中存在环,则这两个指针一定会在某个时候相遇,也就是Front == Back,如果Front走完全部链表了都没有相遇,则这个链表中没有环。...

2020-03-11 16:38:53 116

原创 LeetCode 算法题库【122】——买卖股票的最佳时机Ⅱ

买卖股票的最佳时机Ⅱ题目描述:解题思路:第一种:这个思路也是很简单的,我发现这里有个很神奇的地方,就是这里我们只需要把这个数组中的所有相邻元素的差值算出来,然后将这些元素中大于零的数的和求出来,这就是我们所需要的最大利润。原理也很简单,就是当你在算最大利润的时候,每次股票的利润都是卖出的那天价格减去买入的价格,因为我们不限制买卖股票的数量,那么我们就把只要是盈利的价格都加在一起,而盈利...

2020-03-11 16:36:59 148

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除