自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Leetcode】525. 连续数组【每日一题系列20210603】

前缀和+哈希表把数组中的0变成-1,这样具有相同数量0和1的子数组就等价于,前缀和相同的子数组。接下来,只需要比较哪两个相同的值之间距离最大。class Solution: def findMaxLength(self, nums: List[int]) -> int: length = len(nums) for i in range(length): if nums[i] == 0: ...

2021-06-03 15:33:10 87

原创 【Leetcode】523. 连续的子数组和【每日一题系列20210602】

这道题是前缀和+哈希表首先求出前缀和,然后建立哈希表哈希表的键是余数,值是下标,如果在前缀和中有两个数的余数相同,说明这两个数相减绝对能被k整除。class Solution: def checkSubarraySum(self, nums: List[int], k: int) -> bool: # for i in range(len(nums)): # if i >= 1: # if tota..

2021-06-02 10:26:18 78

原创 【Leetcode】1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?【每日一题系列20210601】

六一儿童节的糖这道题用到的是前缀和,只要保证我们能吃的糖果数量的最大值和最小值的区间,和要吃到目标糖果所需吃的糖果数量的最大值和最小值的区间,这两个区间有交集,我们就能吃目标天数吃到我们想吃的糖果。class Solution: def canEat(self, candiesCount: List[int], queries: List[List[int]]) -> List[bool]: #首先计算前缀和 total = list(accumu..

2021-06-01 21:16:31 92

原创 【Leetcode】231. 2 的幂【每日一题系列20210530】

这道题有两种方法:1、位运算 首先,2的幂都是大于0的。 其次,2的幂数和它的前一位数的异或运算一定是02、判断n是不是2的30次方的约数class Solution: def isPowerOfTwo(self, n: int) -> bool: return n > 0 and (n & (n - 1)) == 0 # return n > 0 and Solution.BIG % n == ...

2021-05-30 16:56:17 62

原创 【Leetcode】1074. 元素和为目标值的子矩阵数量【每日一题系列20210529】

枚举子矩阵的上下边界,并计算出该边界内每列的元素和,则原问题转换成了如下一维问题:给定一个整数数组和一个整数 target,计算该数组中子数组和等于 target 的子数组个数。其中往前缀和出现次数的列表中加1 和 查询pre-k出现的次数 的顺序很关键,一定要先查询再加1如果先加1再查询,当k=0时, 统计的pre-k出现的次数会正常多一次,自己减了一次自己class Solution: def numSubmatrixSumTarget(self, matrix: List..

2021-05-29 16:32:01 110

原创 【Leetcode】477. 汉明距离总和【每日一题系列20210528】

计算二进制中每一位的 0和1 的数量分别为n-c和c,则这一位的汉明距离为(n-c)*c然后在诸位计算即可class Solution: def totalHammingDistance(self, nums: List[int]) -> int: n = len(nums) ans = 0 for i in range(30): c = sum(((val >> i) & 1) fo...

2021-05-28 23:55:39 52

原创 【Leetcode】461. 汉明距离【每日一题系列20210527】

今天这道题比较简单,计算x y异或,使用bin函数转换为二进制,然后转换为字符,统计1的个数class Solution: def hammingDistance(self, x: int, y: int) -> int: z = x^y stri =str(bin(z)) #bin() 返回一个整数 int 或者长整数 long int 的二进制表示。 z = stri.count('1') re...

2021-05-28 00:04:03 49

原创 【Leetcode】238. 除自身以外数组的乘积【每日一题系列20210525】

我们不必将所有数字的乘积除以给定索引处的数字得到相应的答案,而是利用索引左侧所有数字的乘积和右侧所有数字的乘积(即前缀与后缀)相乘得到答案。对于给定索引 i,我们将使用它左边所有数字的乘积乘以右边所有数字的乘积。用一个遍历来跟踪右边元素的乘积,class Solution: def productExceptSelf(self, nums: List[int]) -> List[int]: length = len(nums) answer...

2021-05-25 23:07:18 49

原创 【Leetcode】692. 前K个高频单词【每日一题系列20210520】

class Solution: def topKFrequent(self, words: List[str], k: int) -> List[str]: words_count = Counter(words) #Counter()函数,用来跟踪值出现的次数,为无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。 return list(map(lambda x: x[0], heapq.n...

2021-05-20 13:41:38 61

原创 【Leetcode】13. 罗马数字转整数【每日一题系列20210515】

1、构建一个字典记录所有罗马数字子串,举例:先记录I的对应值1,再往前移动一步记录IV的值33,加起来正好是IV的真实值4。2、遍历整个 ss 的时候判断当前位置和前一个位置的两个字符组成的字符串是否在字典内,如果在就记录值,不在就说明当前位置不存在小数字在前面的情况,直接记录当前位置字符对应值class Solution: def romanToInt(self, s: str) -> int: d = {'I':1, 'IV':3, 'V':...

2021-05-16 00:00:48 85

原创 【Leetcode】12. 整数转罗马数字【每日一题系列20210514】

思路一:硬编码数字将每一位上每一个数字整理成硬编码表,利用模运算和除法运算,我们可以得到num 每个位上的数字,在硬编码表中查找对应的罗马字符,并将结果拼接在一起,即为num对应的罗马数字。运算较快,但占用内容较大class Solution: THOUSANDS = ["", "M", "MM", "MMM"] HUNDREDS = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"] ...

2021-05-14 23:52:37 62

原创 【Leetcode】1310. 子数组异或查询【每日一题系列20210512】

解题思路利用 与或的 特性 A ^ A = 0, B ^ 0 = B 的特性假设数组现在的元素 是 [A, B, C, D, E]我们想计算 D, E 的结果,那可以用 map[E] ^ map[C] = A^B^C^D^E ^ A^B^C = A^A^B^B^C^C^D^E = 0^0^0^D^E = D ^ Eclass Solution: def xorQueries(self, arr: List[int], queries: List[List[int]]) ->...

2021-05-12 23:59:28 42

原创 【Leetcode】1734. 解码异或后的排列【每日一题系列20210511】

这道题的思路是基于if x ^ y = z:then x = y ^ z所以我们要先求出perm数组中第一数,剩下的依次都可以解出,那么第一个数怎么求?1、perm数组是前n个正整数的排列,所以能够求得整个perm数组异或后的值设为total2、而且n为奇数,所以encoded数组中奇数项异或后的值就是perm数组除去第一个项,剩下所有项的异或后的值,设为odd3、对 total 和 odd 进行异或运算,就可以求得perm[0]class Solution: de..

2021-05-11 22:38:25 67

原创 【Leetcode】872. 叶子相似的树【每日一题系列20210510】

深度优先遍历 DFS在深度优先搜索的过程中,我们总是先搜索当前节点的左子节点,再搜索当前节点的右子节点。如果我们搜索到一个叶节点,就将它的值放入序列中。在得到了两棵树分别的「叶值序列」后,我们比较它们是否相等即可。# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# ..

2021-05-10 20:16:02 55

原创 【Leetcode】1723. 完成所有工作的最短时间【每日一题系列20210508】

二分 + 递归 + 剪枝整道题的思路:用二分发来找一个limit值,为每个人最大运输量的大小,这个值要尽可能的小,而且在这个limit下,工作能分完。 递归是用来尝试在我们假设的limit值下,能不能把工作分完。 先把较大的值依次加到第一个人身上,如果超出limit,再加到下一个人身上,看能否把工作分完,并且保证每个人都有分到工作。 ...

2021-05-08 21:11:48 172

原创 【Leetcode】1486. 数组异或操作【每日一题系列20210507】

给你两个整数,n 和 start 。数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length 。请返回 nums 中所有元素按位异或(XOR)后得到的结果。很友好的一道题*-*class Solution: def xorOperation(self, n: int, start: int) -> int: result = 0 for i in range(n):

2021-05-07 20:19:43 67

原创 【Leetcode】554. 砖墙(哈希表)【每日一题系列20210502】

其实主要思路就是从数组中怎么得到缝隙的位置。如果缝隙的位置是根据缝隙离最左边多远来决定,那么缝隙的位置可由数组累加得到。有了缝隙的位置很自然的会想到,可以统计每个位置有多少缝隙。因为返回最少的砖头数量 = 墙高 - 最多缝隙class Solution: def leastBricks(self, wall: List[List[int]]) -> int: gapdict = collections.defaultdict(int) #..

2021-05-03 20:50:23 62

空空如也

空空如也

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

TA关注的人

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