Leetcode
文章平均质量分 53
JamePrin
这个作者很懒,什么都没留下…
展开
-
Leetcode每日刷题【中】--Day 25
不记录简单题目在这里了。1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?前缀和,简单判断之后就可以了。是双百哈哈哈哈。但官方的题解还是强太多了。class Solution: def canEat(self, candiesCount: List[int], queries: List[List[int]]) -> List[bool]: Bools = [] a = list(accumulate(candiesCount))原创 2021-06-01 23:38:32 · 150 阅读 · 0 评论 -
Leetcode每日刷题【中】--Day 23
第 53 场双周赛记录(前三题)长度为三且各字符不同的子字符串很简单的一道题,利用三个指针,一次多一个单位,同步向右逐个遍历。满足都不相等就记录一次。class Solution: def countGoodSubstrings(self, s: str) -> int: a, b, c = 0, 1, 2 count = 0 for _ in range(len(s)-2): if s[a]!=s[b] and s原创 2021-05-30 09:48:39 · 107 阅读 · 0 评论 -
Leetcode每日刷题【中】--Day 22
477. 汉明距离总和拿到这道题,率先看了一下数组长度,暴力解题可能超时。必备知识:有m个0,1的数,找出两两不同的数对会有几个(这就是明汉距离)。只需要数出0有n个,答案就是n*(m-n)个知道上边的知识点,利用二进制逐位去计算求和就可以了。class Solution: def totalHammingDistance(self, nums: List[int]) -> int: distance = 0 for i in range(30):原创 2021-05-28 15:36:48 · 81 阅读 · 0 评论 -
Leetcode每日刷题【中】--Day 21
633. 平方数之和用两种方式解这道题吧第一种:双指针很明显一个数如果能被开放,就会有 0**2 + sqrt(c)**2 == c若满足那就从这里开始,a == 0, b == int(sqrt(c))进行从两边到中间的进行查找查找条件:如果左边大于右边,那就是b比较大,b要往左边移动;反之a比较小,a往右边移动class Solution: def judgeSquareSum(self, c: int) -> bool: b = int(sqrt(c))原创 2021-05-27 12:01:56 · 149 阅读 · 0 评论 -
Leetcode每日刷题【易】--Day 20
461. 汉明距离一道easy题,让我学到了很多极其常规想法,对2取模,比较记录。class Solution: def hammingDistance(self, x: int, y: int) -> int: distance = 0 while True: if x%2 != y%2: distance += 1 x //= 2 y //= 2原创 2021-05-27 01:46:41 · 158 阅读 · 0 评论 -
Leetcode每日刷题【难】--Day 19
76. 最小覆盖子串终于想出来了,看着C++题解,其++变量实数不可忽视。被坑了几个小时这道题的使用到的是双指针的知识点。具体要用到滑动窗口,这个在条件判断的时候会比较麻烦~具体解析:先记录一下目标中的字符种类及其个数再利用双指针逐个遍历字符串s过程中要2个步骤:**1.先要找到一个区间:区间里边要有目标字符(包含种类和个数要求) ** 2.进行滑动:这里分两个条件,①先滑动左边界,找到尽可能小的区间和起点;②如果不满足第一个条件,则进行右边界扩大,达到步骤1之后就进行步骤2原创 2021-05-25 21:48:21 · 127 阅读 · 0 评论 -
Leetcode每日刷题【中】--Day 18
167. 两数之和 II - 输入有序数组双指针思路:由于答案肯定只有一个,只需要头尾开始遍历就好了,而遍历的条件:1.如果当前的和太大,那一定是右边的错,右边得减小;2.如果太小,则左边的错,左边得移动到更大的位置。class Solution: def twoSum(self, numbers: List[int], target: int) -> List[int]: left = 0 right = len(numbers)-1 w原创 2021-05-24 15:30:43 · 151 阅读 · 0 评论 -
Leetcode每日刷题【中】--Day 17 (含周赛前两题)
力扣第242场周赛,前两题。为啥是前两题?因为菜hhhh~5763. 哪种连续子字符串更长简单地数 数代码丑,简单题能快点过就好了。虽然卡了一会儿class Solution: def checkZeroOnes(self, s: str) -> bool: atotal, btotal = [], [] a, b = 0, 0 last = s[0] length = len(s) flag = s[原创 2021-05-23 12:33:13 · 125 阅读 · 0 评论 -
Leetcode每日刷题【难】--Day 16
810. 黑板异或游戏博弈看了题解才懂的,这个过程需要捉住偶数这个破题的重点:如果数组长度为偶数一开始异或和为0,则直接先手获胜一开始如果异或不为0,则至少有2个数a, b使得整个数组异或不为零:这里进行拆分数组a, b, *Z = num;如果 a^b^Z != 0,则 至少存在a != b -> a^b!=0(疑惑:如果 a==b,Z != 0 解惑:则Z中存在 另一对数a, b,使得Z != 0)所以 一定有 a != b取完:因为偶数个数,如果一直取数,最后取完就是先手胜原创 2021-05-22 13:23:40 · 206 阅读 · 2 评论 -
Leetcode每日刷题【中】--Day 15
很惭愧,现在即将结束才开始做题1035. 不相交的线过0点了,不行,一定要堆起来,不能断,先发了,周六再补解析class Solution: def maxUncrossedLines(self, nums1: List[int], nums2: List[int]) -> int: m = len(nums1) n = len(nums2) dp = [[0]*(n+1) for _ in range(m+1)] for原创 2021-05-22 00:01:32 · 107 阅读 · 0 评论 -
Leetcode每日刷题【中】--Day 14
692. 前K个高频单词这道题比较简单,可能对于 “完成它” 是比较简单,因为针对python来说是很简单的操作。对于不熟悉的我来说,python的一些细节内容还是不太熟悉,所以进行《流畅的Python》的学习,也在持续更进!这里需要使用items()进行键值的遍历,否则好像得不到值。如果需要多条件排序,就在匿名函数中写上对应的位置就好了,具体等以后明白。刚开始排序的时候,直接就根据频次从小到大排列了,忽略寻找时若从后往前会导致:这前K个的排序不满足若频次相同则进行字母排序的要求。如果这样,单词原创 2021-05-20 19:12:28 · 132 阅读 · 0 评论 -
Leetcode每日刷题【中】--Day 13
1738. 找出第 K 大的异或坐标值又是前缀和,连续几次被调教到了,这次终于翻身一次了!似乎比官方部分题解要节约用时和节省空间的思路还是像之前的一样,前缀异或,然后在python找出第k大那是易如饮水的事了。但是重点要理解一句话矩阵中坐标 (a, b) 的 值 由对所有满足 0 <= i <= a < m 且 0 <= j <= b < n 的元素 matrix[i][j](下标从 0 开始计数)执行异或运算得到这里画个图之后,就能够很容易理解题意了。图片在下方原创 2021-05-19 16:15:00 · 98 阅读 · 0 评论 -
Leetcode每日刷题【中】--Day 12
1442. 形成两个异或相等数组的三元组数目思路比较简单,但是时间复杂度太高,一旦数据给得比较大就没了这里采用的是前缀异或,然后根据题目要求求解。(初次代码)class Solution: def countTriplets(self, arr: List[int]) -> int: xor_arr = [0] count = 0 for i in arr: xor_arr.append(i^xor_arr[-1])原创 2021-05-18 16:41:26 · 95 阅读 · 0 评论 -
Leetcode每日刷题【中】--Day 11
993. 二叉树的堂兄弟节点DFS 树的中序遍历(中左右) 简单题class Solution: def isCousins(self, root: TreeNode, x: int, y: int) -> bool: X_depth, X_p, X_F = None, None, False # 用来记录信息 分别是 树的深度,父亲节点,找到与否的bool值 Y_depth, Y_p, Y_F = None, None, False原创 2021-05-17 15:54:51 · 96 阅读 · 0 评论 -
Leetcode每日刷题【易】--Day 10
122. 买卖股票的最佳时机 II(贪心)这道题只要明白,ΔPi max=pn−p1=(p2−p1)+(p3−p2)+...+(pn−pn−1)\Delta P_{i\ max} = p_n - p_1=(p_2 - p_1)+(p_3 - p_2)+...+(p_n - p_{n-1})ΔPi max=pn−p1=(p2−p1)+(p3−p2)+...+(pn−pn−1)我们希望的卖出去之后有更大的收入,是可以通过每次上升去累加的,这样能够达到前后差值最大的原创 2021-05-16 10:07:08 · 231 阅读 · 0 评论 -
Leetcode每日刷题【中】--Day 9
13. 罗马数字转整数(模拟)**非常简单理解代码**反向遍历,按等级关系进行加或减class Solution: def romanToInt(self, s: str) -> int: m = len(s) level = {'Q': 0, 'I': 1, 'V': 2, 'X': 3, 'L': 4, 'C': 5, 'D': 6, 'M': 7} # 这是等级 val = {'I': 1, 'V': 5, 'X': 10, 'L'原创 2021-05-15 14:55:03 · 121 阅读 · 0 评论 -
Leetcode每日刷题【中】--Day 8
435. 无重叠区间(贪心)贪心策略是:尽可能让选入的区间的右边界小,因为这样才能纳入更多的区间,相应的不需要删去太多区间。这就达到了减去最小区间数而使得区间不重叠。class Solution: def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int: intervals.sort(key=lambda x: x[1]) # 根据有边界排序 ans = [intervals[0原创 2021-05-14 20:49:04 · 189 阅读 · 0 评论 -
Leetcode每日刷题【难】--Day 7
过去的那些可怕的事,现在回想起来都些纸老虎。455. 分发饼干简单的排序和贪心思路: 将胃口和饼干从小到大排序,然后为了使得更多的孩子能够满足,我们应该选不少于胃口大小的饼干给孩子,但是这个饼干要尽可能小,以存有更大的饼干能够使得更多的大胃口的孩子满足。class Solution: def findContentChildren(self, g: List[int], s: List[int]) -> int: lenth1 = len(g) # 遍历时要看那个原创 2021-05-13 14:36:20 · 167 阅读 · 0 评论 -
Leetcode每日刷题【中】--Day 6
冲冲冲!!!1310. 子数组异或查询(前缀异或)一开始使用暴力解法直接就超时了。若平均查询需要执行n/2次,m次查询就是m*n/2,时间复杂度O(m*n),时间复杂度相当的高。这里是与前缀和相似的解法。前缀和:有一串数字,需要求从 下标L 到下标R(L<=R)的和。这里规定和的数组中,零号元素是0.以方便后来进行相减操作。前缀异或:相同地,将前R个先异或,然后再进行将前面的元素进行异或。类似于前缀和的减前边的数。# 模板class Solution: def xorQuer原创 2021-05-12 19:02:14 · 111 阅读 · 0 评论 -
Leetcode每日刷题【中】--Day 5
1720. 解码异或后的数组这是一道位运算的简单题,后边有此题升级版的中等题目其实,知道一些基本知识后,此题是很简单的。异或满足交换律异或满足:a ^ b = c 可知 a ^ c = ba ^ 0 = aa ^ a = 0这道题给出了加密后的数组,同时也给出了原数组的第一个值,利用上边的第二个知识,问题就迎刃而解了。将加密数组的第一个元素和原数组的第一个元素异或就得到原数组第二个元素…根据题目,就这样推下去答案就出来了。class Solution: def decode(s原创 2021-05-11 17:50:10 · 61 阅读 · 0 评论 -
Leetcode每日刷题【中】--Day 4
坚持!859. 亲密字符串为节省页面,题目就省了。看完自己的答案,发现和题解比起来显得稚嫩。首先,稚嫩的思路是将不同的位置找出来,然后去两两调换位置,调换后进行对比。时间复杂度O(n2)其实有更简单的思路:""" 如果是亲密字符串,就一定是两个调换位置。不能再多。 只要遍历一次,找出不一样元素,以一对关系的形式记录起来。 如果是两对关系,如果是亲密字符串,则第一对的关系一定是另一对的逆。 其他不符合条件 return False 例如:符合条件的一定会是:Xi == Yj 与 Xj原创 2021-05-10 22:41:10 · 90 阅读 · 0 评论 -
Leetcode每日刷题【中】--Day 3
剑指 Offer 09. 用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQueue","delet原创 2021-05-09 12:29:25 · 79 阅读 · 0 评论 -
Leetcode每日刷题【易】--Day 2
Leetcode每日刷题【易】–Day 2[LCP 22. 黑白方格画小扣注意到秋日市集上有一个创作黑白方格画的摊位。摊主给每个顾客提供一个固定在墙上的白色画板,画板不能转动。画板上有 n * n 的网格。绘画规则为,小扣可以选择任意多行以及任意多列的格子涂成黑色(选择的整行、整列均需涂成黑色),所选行数、列数均可为 0。小扣希望最终的成品上需要有 k 个黑色格子,请返回小扣共有多少种涂色方案。注意:两个方案中任意一个相同位置的格子颜色不同,就视为不同的方案。示例 1:输入:n = 2, k原创 2021-05-08 17:53:34 · 185 阅读 · 0 评论 -
Leetcode每日刷题【易】--Day 1
每日回顾刚刚做出了一个特别可惜的选择,但要明白的是,在一个果园里,当前看到的果子或许感觉很大,当你只能拿得动一个果子的时候,你会寻找更大的还是就摘下眼前的这一个。这个选择只能成为我的跳板!回归正题:俺~(大一)算法菜鸡,想要学习过程中记录一下,也顺便能够分享给新入门的朋友们。今天开始第一天力扣刷题,当然只敢刷简单题了–对于python还不是很熟练。这一道题特别有趣,题目是这样的:LCP 02. 分式化简有一个同学在学习分式。他需要将一个连分数化成最简分数,你能帮助他吗?连分数是形如上图的原创 2021-05-07 22:11:31 · 191 阅读 · 1 评论