LeetCode
微若蓝
这个作者很懒,什么都没留下…
展开
-
3. 无重复字符的最长子串
d原创 2022-06-20 19:31:08 · 65 阅读 · 0 评论 -
51. N 皇后
这个题目我是暴力做的不断地深度优先递归这里有个很重要的化简,就是用一个数组nums长度为n这样的话nums[i]对应的元素j 就是坐标(i,j)'''N皇后问题是指在N*N的棋盘上要摆N个皇后,要求任何两个皇后不同行、不同列,也不在同一条斜线上。给定一个整数n,返回n皇后的摆法有多少种。n=1,返回1。n=2或3,2皇后和3皇后问题无论怎么摆都不行,返回0。n=8,返回92。'''''' 基本思路,进行名义上的深度优先遍历 假设任意一个红皇后,都只能在某一行(不考虑皇原创 2022-02-07 23:08:21 · 163 阅读 · 0 评论 -
4. 寻找两个正序数组的中位数
import heapqimport random''' 如果比赛的时候要使用堆 自己写肯定不现实 当然是要那人家的用 但是python自带的没有大根堆 所以这里就用负数使用小根堆'''''' 首先这种写法很快很快,大概是o(logn)级别的 基本思路: 如果说将一组数据(不包含负数)对半分 一半是小的,一半是大的 小的不管里面是怎么弄得,最大的可以拿到 大的不管里面是怎么弄得,原创 2022-02-07 23:02:51 · 72 阅读 · 0 评论 -
435. 无重叠区间
贪心算法一定要写比较器import randomdef fun1(intervals): '''贪心策略的题目 我是这样贪心的移除最少,就是选择最多,且不重叠 将其按照末尾结束时间排序 这样每次进行选择之后,剩下的空间最多 ''' '''1.先排好序''' if intervals==[]: return 0 intervals.sort(key=paixu) result=0 poi原创 2022-01-28 22:30:02 · 247 阅读 · 0 评论 -
图的深度优先遍历
''' 深度优先遍历 首先遍历结果显然不唯一'''class Node(): def __init__(self,value): self.value=value #对应数据 self.enter=0 #该节点的入度 self.out=0 #该节点的出度 self.nexts=[] #由该点发散出去的边(出去的边),直接相连的点 self.edges=[] #由该点发原创 2022-01-23 15:39:33 · 290 阅读 · 0 评论 -
图的宽度优先遍历
''' 首先假设该图为连通图 没有入度为0的节点,或者从入度为0的节点出发 为了避免重复走路(因为图是可以乱串的,不像树一样直直的往下走) 需要创建一个set,用来记录已经走过的节点'''class Node(): def __init__(self,value): self.value=value #对应数据 self.enter=0 #该节点的入度 self.out=0 #该节点的出度原创 2022-01-23 15:38:23 · 632 阅读 · 0 评论 -
图的定义方式
图的定义class Node(): def __init__(self,value): self.value=value #对应数据 self.enter=0 #该节点的入度 self.out=0 #该节点的出度 self.nexts=[] #由该点发散出去的边(出去的边),直接相连的点 self.edges=[] #由该点发散出去的边 '''原创 2022-01-23 14:05:40 · 131 阅读 · 0 评论 -
折痕问题(中序遍历)
题目重点是找到对应的规律,逻辑''' 这个题目并没有在LeetCode上面找到 它相当于是一种面试题目,首先我们要找到其中蕴含的规律(对折方式是对着自己对折) 第一次: 凹 第二次: 凹 凹 凸 第三次:凹 凹 凸 凹 凹 凸 凸 第四次:....'''''' 你可以看到他就是一个二叉树,中序遍历的结果 左节点一定为凹 右节点一定为凸 我如果不嫌麻烦,或者说没有很好思路的化,可以实际的创造一个二叉树,然后再进行中序遍原创 2022-01-22 23:49:46 · 268 阅读 · 0 评论 -
510.二叉搜索树的中序后继2
''' 这个题目在LeetCode上是一道会员题目 所以这里就大致写一下思路和代码 了解后继节点的含义:一个节点的后继节点是指在中序遍历中,该节点的下一个节点 如遍历结果为ABCD 那么C的后继节点为D o(n)算法 基本思路: 假设节点为o1 其对于的后继节点为o2 通过中序遍历,在遍历过程中将所有结果入字典,每次进行查找(o2)如果在该次查找中找到了o1那么o2就是其后继节点 o(k)算法 基本思路:原创 2022-01-22 23:30:18 · 342 阅读 · 0 评论 -
297. 二叉树的序列化与反序列化
这个咋一看是很吓人的,什么序列化,反序列化.其核心就是转化成一种数据类型(如字符串,列表等)并且可以唯一标识当前树这里我才用的序列化方法是纯先序遍历,通过_来进行元素的分割重点是反序列化,他的思想也是递归,这是显而易见的,因为我所需要的数据不包括_所以先对其进行删除,然后先填充左子树,在遇到#时结束再填充右子树,再回到父节点填充其右子树理清楚之后,写代码就好写了''' 这个题目标注的是一个困难题 我听他的讲了一下,发现他的思路并不是很难 可以只通过先序,中序,后序,以原创 2022-01-22 23:10:55 · 71 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
二叉树的最近公共祖先思路总结: 这个题目的思路很好,不是我常见的想法 他是什么,找到两个节点最近公共祖先 在最近的公共祖先后面的所有都是他的祖先 怎么想的:一个节点只会有一个父节点,两个节点可能是这个样子的 0->0->0->0 也可能是这样的 0->0->0->0 分叉了 | ^ 0 所以就是把所有节点的父节点通过字典记录,然后将p从下往上进行遍历 找到对应的一条线 然后再遍历q,每次进行一个查找 .原创 2022-01-21 21:32:17 · 165 阅读 · 0 评论 -
剑指 Offer 55 - II. 平衡二叉树
树状dp自底向上的递归''' 平衡二叉树的定义 1.对于任意节点,左子树是平衡二叉树或空树 2.对于任意节点,右子树是平衡二叉树或空树 3.对于任意节点,左右子树高度差小于1 那么不是平衡二叉树也很好判断了 对于任意节点三个条件有一个不满足则不是平衡二叉树 那么我需要什么条件,是否为平衡二叉树,以及对应的高度'''def main1(root): bo=fun1(root)[0] return原创 2022-01-14 11:54:47 · 142 阅读 · 0 评论 -
958. 二叉树的完全性检验
#这个代码无法通过,我觉得我写复杂了,所以这个代码不要再修修补补了#直接换个思路def fun1(root): ''' 验证是否为完全二叉树 完全二叉树的定义: 除最后一层外,每一层一定都是满的 最后一层若不满,则为是从左往右依次排列 那么第一想法很简单,不能是深度优先遍历,应该是宽度优先遍历 每一层每一层的遍历,那么不满足什么规则就不是完全二叉树了 1.一个节点只.原创 2022-01-14 11:49:53 · 119 阅读 · 0 评论 -
98. 验证二叉搜索树
递归的中序遍历,动态的进行比较class lei(): def __init__(self): self.prevalue=-float('inf') #负无穷 def fun1(self,root):#递归形式的中序遍历 if root==None: #基本结束条件 return True #说明是正常结束 bool1=self.fun1(root.left) #看左子树是否为正常的 if n原创 2022-01-14 08:46:04 · 111 阅读 · 0 评论 -
102. 二叉树的层序遍历
平平无奇根据队列来def fun1(root): ''' 这个是利用队列来确定 将根节点入队列 1.删除节点 2.打印 3.将左节点,右节点入队列 不断重复 怎么确定到了另外一行 :param root: :return: ''' if not root: return [] duilie = [root] ls = [原创 2022-01-12 22:33:36 · 72 阅读 · 0 评论 -
94. 二叉树的中序遍历
前序遍历,并且和我以前写的非递归前序遍历实现形式上并不一样是先入根节点,然后开始1.出栈2.打印3.先右后左的入栈这样的打印出来的就是根左右class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = rightdef fun1(root):#二叉树的前序遍历的递归形式,非递归代原创 2022-01-12 22:10:06 · 52 阅读 · 0 评论 -
142. 环形链表 II
哈希表做法,就是不断的查表def fun1(head): #哈希表做法 dic={} q=head while q: if q in dic: return q dic[q]=0 q=q.next return None双指针做法/def fun2(head): s=head q=head while q and q.next: s=s.next原创 2022-01-12 19:11:36 · 82 阅读 · 0 评论 -
141. 环形链表
对于链表的题目,如果题目要求空间复杂度为o(1)或者怎么样不出意外就是双指针但是首先肯定是哈希表的做法更容易想到哈希表做法,空间上肯定是更复杂def fun1(head):#hash表做法 dic={}#创建字典 q=head while q: if q in dic: return True dic[q]=0 q=q.next return False双指针def fun2(head):原创 2022-01-12 17:50:39 · 84 阅读 · 0 评论 -
209. 长度最小的子数组
总结: 滑动窗口这个可以僚机一下o(n2)的时间复杂度的算法def fun1(target,nums):#o(n2)的代码超时了 ''' 这个怎么说呢 如果要写一个o(n2)的算法我觉得是很简单的 现在就来写一个 :param target: :param nums: :return: ''' max_ = float("inf") # 开到最大长度 bijiao = float("inf")原创 2021-12-22 12:15:49 · 48 阅读 · 0 评论 -
74. 搜索二维矩阵
总结: 答案里面给了两种方法,一种是两次二分查找 一种是一次二分查找 我这个算是两次二分查找 如果写一次二分查找,相当于拼接成了一个一维数组 def fun1(matrix,target): ''' 每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。 这个一看,如果你给他转化成一个一维数组 那么,就是一个升序的数组,直接二分查找就好 所以第一种思路:转化成一维数组,进行二分查找原创 2021-12-21 19:29:40 · 38 阅读 · 0 评论 -
367. 有效的完全平方数
总结: 我是废物我不会数学 还是二分查找用着舒服 一定要多总结数学思路暴力方法,时间复杂度大概为o(n**0.5)def fun1(num): ''' 第一种方法类似于顺序查找 :param num: :return: ''' if num==1: return True for i in range(2,num): if num/i==i: return True原创 2021-12-21 18:52:29 · 43 阅读 · 0 评论 -
50. Pow(x, n)
总结: 快速幂思想,无论是矩阵快速幂,快速幂,还是快速乘 都是很好的算法 快速幂应该首先考虑的是他的递归形式(因为从左往右没有从右往左好想) 那么这个题目呢? 假设有一个数77 或者 64 x**77=(x**38)**2 * x 所以一旦无法整除,那么就需要补充一个x 可以整除就不需要 但是从左往右看的时候就没有那么明显的规律了 你需要找到规律 而在这里就是 奇数的时候需要进行一个记录内置方法def fun1(x,n):#啊这,它通过了 ''' 这个原创 2021-12-20 11:58:33 · 102 阅读 · 0 评论 -
数据库考试
一张表只能有一个主键,但可以有多个唯一索引如果数据量比较大的情况可以考虑业务分表sql语言中删除视图使用drop命令--模式与内模式的映射 保证数据库物理结构的独立性--模式与外模式的映射 保证数据库逻辑结构的独立性等值连接是从关系R和S的广义笛卡尔积中选取A和B“属性值”相等的元组,所以只要两个关系里面的有元祖属性值相等就可以进行。 而自然连接是要求R和S中有一个或者多个相同的属性组触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准原创 2021-12-19 22:46:04 · 230 阅读 · 0 评论 -
1037. 有效的回旋镖
总结: 数学是个好东西,可惜我没有代码,不带数学的方法,需要判断分母为0问题def fun1(points):#没写完,还要判断分母为0情况 #把三个点拿出来 p1 = points[0] p2 = points[1] p3 = points[2] if (p2[0] - p1[0])!=0: d1 = (p2[1] - p1[1]) / (p2[0] - p1[0]) else: #1,2已经在一条直线上了,看三原创 2021-12-19 22:25:17 · 48 阅读 · 0 评论 -
507. 完美数
总结: 说来说去,就是查表 真实考试写的要不是fun4的查表,要不是fun2的logn算法 这个fun3中所谓的数学,确实有数学的影子,但是不还是在查表? 只是有了数学公式,有了数学证明超时代码def fun1(num): ''' 超时了 我只能说这是正常情况 他要是不超时,我还看不起他 :param num: :return: ''' sum_ = 0 for i in range(1, num原创 2021-12-16 19:41:04 · 64 阅读 · 0 评论 -
268. 丢失的数字
总结: 方法一,我采用的数组哈希是因为他正好在这方面有其特质 可以采用字典,但是时间上会高一点 异或运算,相同为0,不同为1 排序:大炮打蚊子 数学:关注其思想 这个题目的数学并不难想 高中的时候我们就知道,等差数列求和 没什么好说的def fun1(nums): ''' 简简单单写循环 :param nums: :return: ''' n=len(nums) shuzu=[-1]*(n+1)#应该有n+1个数原创 2021-12-16 18:38:01 · 164 阅读 · 0 评论 -
263. 丑数
总结: 我的思路很简单,他只能由2,3,5构成 那么我就不断的判断当前数能不能整除他们三个 中的任意一个,如果可以就替换当前数(当前数//x) 在继续判断 所以fun1的操作有些多余了 那么在想一下还可以优化吗 好吧官方也是fun2的写法 质数:质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。质因子:质因子(或质因数)在数论里是指能整除给定正整数的质数。只有一个质因子的正整数为质数。丑数:就是只包含质原创 2021-12-11 09:35:51 · 739 阅读 · 0 评论 -
231. 2 的幂
总结: 没什么好总结 递归注意: 具有基本结束条件 不断向基本结束条件演进 具有可行性 嗷不对,还有一个o(1)算法 卧槽我把异或运算记错了,必须是一个一个的异或 而不能是直接异或,这两者得出来的结果不同 2**x一定是10000... -1后变成011111... 所以与运算结果为0,且具有唯一 但或运算1100 0011 也可以得到1 循环def fun1(n): sum_=1 while sum_<n: sum_=su原创 2021-12-11 08:49:50 · 217 阅读 · 0 评论 -
202. 快乐数
总结: 数学不够代码来凑 他既然让我来看是不是快乐数(能否趋近于1) 那么肯定就有别的情况 你就拿个数循环试一下好吧''' ps:看看这题能不能让我快乐 好吧看来是可以了'''def fun1(n): ''' 首先这是一道带有数学标签的题目 我的只管想法是 有些数字会趋近于1 有些会趋近于无穷大 还会有其他可能吗? 如何判断会趋近于无穷大?原创 2021-12-10 22:51:53 · 163 阅读 · 0 评论 -
874. 模拟行走机器人
总结: 对于数组的遍历问题,有个很重要的思想就是辅助列表(记录行走方向) 在这个题目中也是需要辅助列表的 最开始的fun1的思路很简单 然后fun2开始考虑障碍物问题 我最开始的想法很简单,我不想一步步走,走一步查一步(因为我觉得这样很费时间)所以我就采取了一步走到位的策略,但是这样搞了之后,我就必须将元素遍历一遍,那么每一次一个遍历,o(nm)的时间复杂度 我最开始觉得这样很好,但我忘记了字典,集合的查找性质(接近于o(1)的时间复杂度) 所以我反而更麻烦了 这就是fun3为什么可以通过原创 2021-12-10 19:51:43 · 64 阅读 · 0 评论 -
1103. 分糖果 II
总结: 简简单单写循环,不要看不起任何一道题目def fun1(candies,num_people): ''' 简简单单写循环,分糖果直到糖果数为0 :param candies: :return: ''' i = 1 result = [0] * num_people while candies > 0: if candies >= i: result[(i - 1) %原创 2021-12-10 09:26:07 · 3249 阅读 · 0 评论 -
999. 可以被一步捕获的棋子数
总结: 像这种遍历问题,尤其是二维数组的遍历 有一种常用的技巧就是创建一个辅助数组(这个辅助数组是要走的方向 放的都是定值) 上来不管三七二十一直接放入4个循环def zhaoche(board): #首先找到车 for i in range(len(board)): for j in range(len(board[0])): if board[i][j]=="R": return i,jdef fun原创 2021-12-10 09:06:59 · 153 阅读 · 0 评论 -
498. 对角线遍历
思路,先不管方向问题,每个对角线都是从上到下,从右到左遍历,然后对于反方向的进行调整我这个代码有太多的重复计算所以导致了提交不通过下面fun2()是化简后的def fun1(mat): bianlicishu=len(mat)+len(mat[0])-1 result=[] #结果存储 for i in range(bianlicishu): nums=[] for j in range(i+1): #可以原创 2021-12-09 20:22:48 · 90 阅读 · 0 评论 -
289. 生命游戏
总结: 像这种二维数组的遍历题目 有一个很重要的技巧,就是 linju=[(-1,0),(-1,+1),(-1,-1),(0,-1),(0,+1),(+1,-1),(+1,0),(+1,+1)] 将遍历会触及到的下标用一个个元组保存下来linju=[(-1,0),(-1,+1),(-1,-1),(0,-1),(0,+1),(+1,-1),(+1,0),(+1,+1)] #技巧 hang=len(board) lie=len(board[0]) n原创 2021-12-09 19:37:17 · 5627 阅读 · 0 评论 -
43. 字符串相乘
fun2的写法是官方的写法一,所以能通过不是没有原因的def fun1(num1,num2):#这个思路有问题,注意是乘法,需要和每个数相乘 #1.创建carry(进位),和存储结果的str_ carry=0 str_='' #2.将num1,num2同时从后往前遍历,进行乘积,进位,和字符串拼接 ind=-1 while ind>=-len(num1) and ind>=-len(num2):#这里需要加个等于 cur原创 2021-12-09 18:45:48 · 271 阅读 · 0 评论 -
832. 翻转图像
总结: 先把思路想好,再写代码好吧? 没什么好说的跟着题目的要求走''''''def fun1(image): ''' 理解题目意思,第一个循环水平翻转 第二个循环进行替换 :param image: :return: ''' for hang in range(len(image)): l = 0 # 左侧 r = len(image[0]) - 1 # 右侧 cu原创 2021-12-08 19:08:24 · 53 阅读 · 0 评论 -
682. 棒球比赛
总结: 简简单单写循环''' 简简单单写循环'''def fun1(ops): nums=[] for i in range(len(ops)): if ops[i]=="+": nums.append(nums[-1]+nums[-2]) elif ops[i]=="C": nums.pop() elif ops[i]=="D": nums.appen原创 2021-12-08 11:34:17 · 3755 阅读 · 0 评论 -
657. 机器人能否返回原点
总结: 傻逼题目,傻逼做 树立自信心,从这题开始''' 首先来个判断 R 向右 L 向左 U 向上 D 向下 然后拿一个[i,j],然后进行模拟就好了'''def fun1(moves): weizhi=[0,0] for i in moves: if i=='R': weizhi[0]+=1 elif i=='L':原创 2021-12-07 23:13:32 · 49 阅读 · 0 评论 -
566. 重塑矩阵
总结: fun1和fun2思想上是一致的,但是fun2的代码更加的简洁 我最开始其实觉得挺难的,后面写了才发现就这样 写之前尽量想好大致的思路,然后记下来 这个题目就是你循环你的,我记录我的def fun1(mat,r,c): ''' 首先,判断是否可以进行转换 我的想法时,首先为了我写代码的方便,转化成一行的字符,不过感觉没必要了 可以知道i+j=cur1+cur2 所以就直接遍历原数组,加上两个cur1和cur2原创 2021-12-07 22:36:30 · 400 阅读 · 0 评论 -
258. 各位相加
总结: 没啥好总结的,就这样吧 写循环就好了循环解法def fun1(num): ''' 两个循环对吧 外层循环判断是否为个位数 内存循环进行当前求和 :param num: :return: ''' str_ = str(num) while len(str_) > 1: # 长度大于1进来 sum_ = 0 for i in str_:原创 2021-12-07 19:45:22 · 273 阅读 · 0 评论