自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode07-22每日一题:旋转数组的最小数字

时隔3周,我又回来啦!今天的题目如下所示:这是一道有趣的题,虽然这里显示的是简单,但那时下来的链接指向的是一道困难的题,所以这道题的难度要怎么算呢?还是折中算他中等吧????这道题题干不长,还挺好理解的,就是一个递增的数组前面有一部分被截取接到了剩下那部分的后面去,,组成了一个新数组,然后要找到这个新数组的最小值。这道题一眼看过去,可以直接一个min()或者进行遍历,找到第一个比前一位数字小的数字输出就好了????不过这道题肯定没有那么简单,因为这样时间复杂度并不低。按照题目相关标签给的提示,这道

2020-07-22 14:39:11 136

原创 leetcode06-30每日一题:用两个栈实现队列

今天的题目如下所示:第一眼看题目,我就觉得这个题目不是很友好,因为题目表达的表达让人有点摸不着头脑。想了一下,题目应该是想表达这样的意思:输入的两个列表分别代表操作以及输入值,CQueue用来调用这个类,没有对应的输入值,因此第二个列表对应的位置是一个空列表;deleteHead用来删除队列中头部的值,也没有对应的输入值,如果队列中有值,就把开头的那个值给推出来删除,并返回删除的这个值,如果队列是空的,就返回-1;appendTail用来在队列的尾部添加值,有对应的输入值,这个输入值就是要添加的值。

2020-06-30 10:01:26 195

原创 leetcode06-27每日一题:缺失的第一个正数

今天的题目如下所示:这道题目的难点在于时间复杂度和空间复杂度的约束。线性时间复杂度相对来说难度没有那么大,常数空间复杂度比较棘手。于是乎我就打算先用线性空间复杂度来解题先。最开始的方法思路是这样的:生成一个和给定数组一样长的判定数组,这个数组的初始值全为0,然后遍历整个nums数组,把值在1到nums长度+1范围内的数字作为下标,对应到判定数组中,把判定数组中对应的值改成1。遍历完了以后再遍历一遍数组,将第一个遇到的0的下标输出,如果遍历完都没输出,就输出长度(最大值)+1的结果。代码也不复杂

2020-06-27 14:23:19 158

原创 leetcode06-26每日一题:移除重复节点

今天的题目如下所示:这道题看起来还是符合简单难度的。因为要保留最开始出现的结点,说明不能直接在提取出来所有节点值后用set去重再生成新节点,因为set会给里面的值排序,这样就不能按照原来的顺序来输出了。因此我最开始的想法就是用list来存储结点,另外用一个set来判断结点value有没有被收集过,如果节点值不在set中,就加入到list中。遍历了head链表后,就把list中的值放到一个新链表中。代码图下所示:# Definition for singly-linked list.# class

2020-06-26 13:16:55 150

原创 leetcode6-19每日一题:验证回文串

今天的题目如下所示:题目本身要解出来是不难的,难点在于怎么优化运行速度。我第一次解出来的代码如下所示:class Solution: def isPalindrome(self, s: str) -> bool: new_s = '' for i in range(len(s)): if str.lower(s[i]) in set(list('qwertyuiopasdfghjklzxcvbnm1234567890')):

2020-06-19 11:23:48 134

原创 leetcode哈希表刷题:拼写单词

最近开始系统地刷题目了,看到比较有意思的题目就写一下心得体会吧~这道题题目如下所示:考虑到chars中每个字符都只能被使用一次,因此不能直接使用set来去重,而是应该考虑使用dict来给每个字符计数,然后在依次对words中的每个字符进行计数,然后再进行比较,将符合条件的字符的长度加和,得到最终结果。使用字典的代码如下所示:from collections import defaultdictclass Solution: def countCharacters(self, words:

2020-06-16 22:45:46 305

原创 leetcode6-14每日一题:转变数组后最接近目标值的数组和

在广州玩了两天,从周五开始就没做题,今天正好有点空闲时间用iPad做一题????今天的题目如下所示:个人认为,这道题的切入点是要从target对arr长度的整除结果入手,然后对整除结果两边进行搜索,这也符合标签里面提到的二分查询。因为要尽可能找符合条件最小的值,因此我是从整除结果的左边开始查找的,找不到再跳到右边查询。这个题目思路不难,代码自然也挺简单的。代码如下所示:由于用iPad编辑代码缩紧换行有问题,于是这次的就直接贴图片啦用iPad做的有点潦草,有啥问题欢迎大家指出????..

2020-06-14 18:45:28 128

原创 leetcode链表刷题:二进制链表转整数

这是一道比较简单的题目,但是还是有一点小小的收获的:这道题其实只要把全部数字读出来就可以转化成结果。但是转化结果的方法也还是有点技巧的。我最开始使用的方法是把二进制数字数出来,转化成字符串然后再转成十进制。在这个方法里,我了解到了int这个函数可以把任意进制的数字转化成十进制的。这里有使用方法代码如下所示:class Solution: def getDecimalValue(self, head: ListNode) -> int: binary = 0

2020-06-10 23:57:55 161

原创 leetcode链表刷题:删除中间节点

题目如下所示:这道题正如评论区所言,最大的难度就是读懂题目本身。这道题的意思是:有一个链表,题目给了我这个链表上除了第一个和最后一个节点以外的一个中间节点。然后我要把这个中间节点给删掉。也就是说,我们能够进行操作的,是一个链表上的一个节点。知道了这个,那题目就不难了。我最开始想的方法比较笨,把所有节点都给改了一遍:# Definition for singly-linked list.# class ListNode:# def __init__(self, x):#

2020-06-10 13:44:48 180

原创 leetcode6-10每日一题:回文数

今天的题目如下所示:下面的那句进阶提示十分显眼,于是乎我便开始用字符串开始尝试了????class Solution: def isPalindrome(self, x: int) -> bool: ''' if int(x) > 0 and str(x)[::-1] == str(x): return 'true' else: return 'false' ''' retur

2020-06-10 11:14:56 102

原创 leetcode链表刷题:两数相加

题目如下所示:这道题很好理解,直接按照链的顺序,先把数字读出来,然后再直接相加就好了。我最开始用了列表来记录数字,但是后来觉得可以直接操作,把数字读出来,然后再递增地乘上位数。最后处理输出列表的时候有两种方法,一个是直接对数字动手,用整数除得到最高位的数字,然后对余数进行迭代操作,最终输出链表;还有一种方法是借助字符串来操作,把数字先转成字符串,然后再转成数字,一位一位加入到链表中。我用了第二种方法,感觉比较直观一点????代码如下:# Definition for singly-linked li

2020-06-09 23:06:28 105

原创 leetcode6-09每日一题:把数字翻译成字符串

今天是我第一次这么快就做完了一道动态规划的题……我只能说递归真香????(告诉以前那个不用递归地自己)今天的题目如下所示:这道题看似要把最终的字符串给翻译出来,但是实际上并不需要,因为我们只需要考虑输入的数字可以怎么样拆分成不同的数字来进行翻译就可以了。比如说图上的示例,12258可以分成:(1,2,2,5,8),我们只要知道可以这样分就可以了,并不需要去翻译。因为每一次的步长和最终字符串长度都会有不同,因此我们可以认为最后能正常输出的结果都是不同的,所以可以直接考虑上所有可能的正常输出结果,而不需

2020-06-09 10:08:32 100

原创 随手一题:将数字变成 0 的操作次数

题目如下所示:题目很简单,但是模拟操作过程很快就能得到结果,但是我觉得这种简单的题应该是会有一行代码解决的,因此我便尝试用一行代码来解这题。因为操作过程中只有除以2和减1两个步骤,因此可以考虑用二进制位运算来处理。我们来考虑一下二进制数字在进行上述两个操作时,数字是怎么变化的:以6为例,二进制下6为110,除以2得到3,3用二进制表示为11,与6的二进制数相比,少了个0。对3继续处理,减1得到2,用二进制表示为10,2除以2得到1,用二进制表示为1。对于3的二进制数11,要变成1的话,需要进

2020-06-08 20:21:22 630

原创 leetcode6-08每日一题:等式方程的可满足性

前两天困难难度的题把我都做到自闭了,导致最后根本就不想写题解(也写不出来)。今天终于见到了一个看起来还能做的题,心里突然感觉有了希望,于是乎在尝试三种不同思路、大改代码几次后终于做出来了……先上题目:最开始我想到的办法就是分块记录等式和不等式,把相等的放在一个组,不等的分开放在不同的组,但是越写越觉得不对劲,因为这样根本没法进行判断,在逻辑上就行不通。于是乎半个小时过去了。然后我又想了一个办法,就是先对所有式子进行排序,等式在前先处理,不等式后处理。然后把等式的字母放在一个集合中,不等式的字母先拿到

2020-06-08 14:01:39 124

原创 leetcode6-06每日一题: 最长连续序列

今天发得比较晚,除了题目很难我想了很久在借助提示的情况下才做出来,还有就是今天一天感觉眼睛都不舒服,感觉是每天盯着屏幕的时间太久了,于是乎就拖到了现在。大家在拼命努力提升自己的时候,也不要忘了好好对自己!今天的题目如下所示:看到难度是困难我就觉得有点不对劲,仔细一读题目就发现,这道题的难点就在于时间复杂度的限制。按照最简单的思维,这道题的解法应该就是对数组进行排序,然后再遍历一次,就可以得到答案了。但是这样的话时间复杂度最低也是O(nlogn)。因此说明先排序再操作行不通。因为时间复杂度的原因,所以

2020-06-06 23:31:42 104

原创 随手一题:砖墙

2020/06/05 傍晚 18:05 倾盆大雨这道题目如下所示:通过图例可以看到,结果2可以认为是墙的厚度6减去缝隙的数量4得到的。墙的厚度我们可以很容易得到,计算wall这个列表的长度就可以了,那缝隙的数量要怎么得到呢?由于缝隙是某一块砖块的终点,因此可以用dict对wall中每个小列表的元素累加和进行计数,这样就得到某个位置上的缝隙数了。然后要使穿过的砖块数量最少,那么缝隙的数量就要最多,这时候把字典的values拉出来取个最大值就好了。有一点需要注意的是,不能把最后一块砖给算上,如果算上了就

2020-06-05 18:19:09 196

原创 leetcode6-05每日一题:顺时针打印矩阵

今天的题目如下所示:这道题其实之前见到过,不过当时一样看过来觉得好像有点麻烦,于是就跳过去做别的题目了????。不过既然今天见到了这题,那就动动手做了吧!其实真要做起来,难度也不会很大,无非就是一直改变读数字的方向,一排一排把数字读出来就好了。最开始我用的方法是遍历每条边,通过pop读取值,然后把pop得到的结果加入到最终要输出的list中,知道matrix为空列表为止。写出来的话难度不大,但是第一次的代码连测试用例都超时了:class Solution: def spiralOrder(

2020-06-05 15:53:02 120

原创 leetcode6-04每日一题:除自身以外数组的乘积

今天的题目如下所示:这道题主要的难点在于不使用除法,而且要在O(n)的时间复杂度下完成题目。既然时间上有限制,那就应该考虑用空间换取时间。想了一下之后,我觉得可以通过创建一个前向累积列表和一个后向累积列表来解决这个问题。为了能让自己更好地理解问题,我还专门画了图来帮助自己理解问题。现在思路有了,直接开写。代码如下:class Solution: def productExceptSelf(self, nums: List[int]) -> List[int]: #

2020-06-04 10:03:52 129

原创 leetcode6-02每日一题:求1+2+…+n

今天的题目如下所示:从题目上看,不能使用乘除法说明不允许用公式计算,不能使用逻辑判断语句说明不能通过判断来实现累加。看着有点难,但是我稍微一想还是得到了一个符合条件速度还很快的答案:class Solution: def sumNums(self, n: int) -> int: return sum(range(n+1))这段代码的执行速率还是很快的:但是我觉得这道题应该没有那么简单,于是乎我便决定再想想,看看有没有别的方法可以实现这个功能。面对这种需要多次循环

2020-06-02 09:36:19 268

原创 leetcode6-01每日一题:拥有最多糖果的孩子

今天的题目如下所示:今天的题目真的是太友好啦,leetcode也准备给各位过节的程序员发糖呢????我就直接po代码上来啦!正常版代码class Solution: def kidsWithCandies(self, candies: List[int], extraCandies: int) -> List[bool]: max_one = max(candies) result = [] for i in range(len(candi

2020-06-01 09:37:55 276

原创 leetcode5-31每日一题:对称二叉树

题目如下所示:观察了一下示例之后,我发现这里说的镜面对称就是从第二层开始,左子树的右子树和右子树的左子树的值是相等的,右子树的左子树和左子树的右子树的值是相等的,而且某一层的是相等的话,那就可以继续对它们的子树进行相同的操作。顺着这个思路的话,比较有效的办法就是使用递归了。思路有了,但是我的代码却写得并不太顺利,我觉得是我对于递归的使用并不熟悉导致的。最开始的代码如下所示:# Definition for a binary tree node.# class TreeNode:# def

2020-05-31 13:46:04 114

原创 leetcode5-30每日一题:柱状图中最大的矩形

今天的题目如下所示:这道题,第一眼看过去,我想到的解法就是遍历每一个数,然后从这个数往两边搜寻连续的比这个数大的数字的个数,用个数乘以这个数的大小,就得到了这个数可以得到的最大数字。原理如下图所示:这种方法的代码如下所示,分了头尾中间三种情况进行讨论处理:class Solution: def largestRectangleArea(self, heights: List[int]) -> int: lens = len(heights) if le

2020-05-31 13:39:14 125

原创 leetcode5-29每日一题:打家劫舍

这个名字就有点怪怪的……题目如下所示:这是一个很典型的动态规划问题,思路也比较简单。思路如下所示:对于第二间房子之后的某一间房子(假设是第i间)来说,到了这间房子时的累计“偷窃”到的金额数可以这样表示:到第i间房子的累计量 = max(到第i-1间房子的累计量, 第i-2间房子的累计量+第i间房子的金额)。max函数里面的两种情况分别对应从第i-2间房子直接跳到第i间房子和从第i-1间房子出发跳过第i间房子。这样的话,就不用去考虑特定的跳法,只要考虑某一部之前是怎么跳过来的就可以了。关于步长的

2020-05-31 13:36:13 123

原创 leetcode5-28每日一题:字符串解码

今天的题目如下所示:看到这道题的时候有一种似曾相识的感觉,在二月份学数据结构的时候自己写过一个表达式求值的函数,感觉跟这个类似,于是乎就动手,用栈来解决这个问题!说起来这个用栈来求解的话,思路很简单,遇到[的时候,把它压入栈,然后存储数字和字符,等到遇到]的时候,就把[弹出栈,然后处理数字和字符。以下是代码:class Solution: def decodeString(self, s: str) -> str: #用栈来解决问题 stack = [

2020-05-31 13:35:22 130

原创 leetcode5-27每日一题:和可被 K 整除的子数组

考完试啦,我又活过来啦!今天的题目如下所示:这道题用暴力枚举的话很直观,把每个子数组列举一遍就可以了,但是这样效率会很低,而且根据之前的经验,用python来暴力枚举必然通不过测试。于是要想别的方法。这里使用到的原理如下所示:对于整除问题来说,可以考虑的元素就是余数,于是可以从余数下手去解。对于两个子数组A和B(A∈B且数组起点相同)来说,如果他们的和对于某一个数K的余数相同,那么B减去A剩余的部分就是一个元素之和可被K整除的子数组。原理有了,要怎么运用到这个题目中呢?对于题目中给定的数组,

2020-05-31 13:34:31 298

原创 leetcode5-03每日一题:最大子序和

题目如下所示:这道题可以使用滑窗的方法来进行暴力求解,把所有可能的结果都遍历一遍,然后取最大值。这种方法的时间复杂很高,且实现方法较为简单,故不提供该种方法的代码。这道题更为精妙的方法是使用动态规划的方法来实现,可以大大降低时间复杂度,比上面的方法好多了。动态规划的方法如下:如果我们想要知道某个数组最大子序列之和,如[1,2,3],我们可以先求出[1,2]之和,然后在把结果加上3,这样就求出来了这个数组的和。如果数组是[1,-2,3],那么对于数组[1,-2]来说,他的和是-1,但是我们不会把这

2020-05-31 13:31:41 124

原创 leetcode5-18每日一题:乘积最大子数组

今天的题目如下所示:之前做过一个类似的题目,是求最大子序和(5月3日的每日一题)。这个题目想了有点久做出来了(题目解答传送门)。本想借这个问题的思路来进行解答,但是发现并不是很好用,可能是我没有找到合适的处理方法,所以就老老实实进行分情况讨论了。整体思路如下:首先判断数组中0的个数和负数的个数,如果没有0,则看负数的个数:如果个数是偶数,就很简单,直接对整个数组进行求积并返回;如果个数是奇数,则分别取第一个负数后的整个数组和最后一个负数前的整个数组进行求积,并返回两者最大值。如果有0,就比较麻烦

2020-05-31 13:30:57 122

原创 leetcode5-17每日一题:课程表 II

由于我暂时对图论方面的知识不够熟悉,所以这个题目我并不知道如何使用BFS和DFS两种方法去实现,通过遍历来做在python的龟速加持下,超出了时间限制,因此今天的重点是对知识点进行熟悉,同时争取看懂并理解代码及背后的算法意义。BFS和DFS两种方法虽然之前有看过一点数据结构的知识,但是很遗憾,看到最后还有一点图论的内容就没有继续看了,因此今天看到这个题目的时候是懵逼的,并不知道要通过构建图的方法来实现,脑子里有的只有遍历,图也不知道要咋用。不废话了,先来熟悉一下BFS和DFS两种算法。BFS:广度优

2020-05-31 13:29:11 157

原创 leetcode5-15每日一题:和为K的子数组

这次的题目如图所示:这道题一看我的第一反应就是存储加和结果来计数,然后根据题目下方给的提示,我创建了一个二维表来存储加和结果。提示为:sum(i,j)=sum(0,j)-sum(0,i), where sum(i,j) represents the sum of all the elements from index i to j-1. Can we use this property to optimize it.sum(0,j)表示的就是nums前j和数字之和,sums(i,j)就是nums

2020-05-31 13:27:42 122

原创 leetcode5-14每日一题:只出现一次的数字

leetcode5-14每日一题:只出现一次的数字这次的题目内容如图所示:①第一种解法:使用字典作为一个小白,我并不知道一些什么奇奇怪怪的神奇算法,所以最开始只能老老实实用遍历加上额外空间来把题目解出来先。为了尽可能降低时间复杂度,我选择用字典来记录数字的出现次数,遍历一次把nums列表中所有数字作为key加入到dict中然后将其出现次数作为value,再遍历一次去字典里面找出value为1的key,并返回:class Solution: def singleNumber(self, n

2020-05-31 13:01:33 176

空空如也

空空如也

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

TA关注的人

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