Skip to content

Commit 9da9ecd

Browse files
author
robot
committed
v0.11.2
1 parent 941528b commit 9da9ecd

File tree

3 files changed

+64
-1
lines changed

3 files changed

+64
-1
lines changed

‎leetcode-cheat.zip

35.9 KB
Binary file not shown.

‎public/manifest.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"manifest_version": 2,
33
"name": "leetcode cheatsheet",
44
"description": "刷题小助手,made by 力扣加加",
5-
"version": "0.11.1",
5+
"version": "0.11.2",
66
"browser_action": {
77
"default_popup": "index.html",
88
"default_title": "力扣加加"

‎src/db/root.db.js

+63
Original file line numberDiff line numberDiff line change
@@ -9694,6 +9694,10 @@
96949694
{
96959695
"language": "py",
96969696
"text": "\nclass RangeModule(object):\n def __init__(self):\n # [1,2,3,5,8,12]\n self.ranges = []\n\n def overlap(self, left, right, is_odd):\n i = bisect_left(self.ranges, left)\n j = bisect_right(self.ranges, right)\n merge = []\n if i & 1 == int(is_odd):\n merge.append(left)\n if j & 1 == int(is_odd):\n merge.append(right)\n # 修改 ranges 的 [i:j-1] 部分\n self.ranges[i:j] = merge\n\n def addRange(self, left, right):\n # [1,2,3,5,8,12], 代入 left = 3, right = 5,此时需要保持不变, 就不难知道应该用 bisect_left 还是 bisect_right\n return self.overlap(left, right, False)\n\n def removeRange(self, left, right):\n # [1,2,3,5,8,12], 代入 left = 3, right = 5,此时需要为 [1,2,8,12], 就不难知道应该用 bisect_left 还是 bisect_right\n return self.overlap(left, right, True)\n\n def queryRange(self, left, right):\n # [1,2,3,5,8,12], 代入 left = 3, right = 5,此时需要返回 true, 就不难知道应该用 bisect_left 还是 bisect_right\n i = bisect_right(self.ranges, left)\n j = bisect_left(self.ranges, right)\n return i & 1 == 1 and i == j # 都在一个区间内\n\n"
9697+
},
9698+
{
9699+
"language": "py",
9700+
"text": "\n\nclass Node:\n def __init__(self, l, r):\n self.left = None # 左孩子的指针\n self.right = None # 右孩子的指针\n self.l = l # 区间左端点\n self.r = r # 区间右端点\n self.m = (l + r) >> 1 # 中点\n self.v = 0 # 当前值\n self.add = -1 # 懒标记\n\nclass SegmentTree:\n def __init__(self,n):\n # 默认就一个根节点,不 build 出整个树,节省空间\n self.root = Node(0,n-1) # 根节点\n\n def update(self, l, r, v, node):\n if l > node.r or r < node.l:\n return\n if l <= node.l and node.r <= r:\n node.v = (node.r - node.l + 1) * v\n node.add = v # 做了一个标记\n return\n self.__pushdown(node) # 动态开点。为子节点赋值,这个值就从 add 传递过来\n if l <= node.m:\n self.update(l, r, v, node.left)\n if r > node.m:\n self.update(l, r, v, node.right) \n self.__pushup(node) # 动态开点结束后,修复当前节点的值\n\n def query(self, l, r,node):\n if l > node.r or r < node.l:\n return False\n if l <= node.l and node.r <= r:\n return node.v == node.r - node.l + 1\n self.__pushdown(node) # 动态开点。为子节点赋值,这个值就从 add 传递过来\n ans = True\n if l <= node.m:\n ans = self.query(l, r, node.left)\n if ans and r > node.m:\n ans = self.query(l, r, node.right)\n return ans\n\n def __pushdown(self,node):\n if node.left is None:\n node.left = Node(node.l, node.m)\n if node.right is None:\n node.right = Node(node.m + 1, node.r)\n if node.add != -1:\n node.left.v = (node.left.r - node.left.l + 1) * node.add\n node.right.v = (node.right.r - node.right.l + 1) * node.add\n node.left.add = node.add\n node.right.add = node.add\n node.add = -1\n\n def __pushup(self,node):\n node.v = node.left.v + node.right.v\n\n def updateSum(self,index,val):\n self.update(index,index,val,self.root)\n\n def querySum(self,left,right):\n return self.query(left,right,self.root)\n \nclass RangeModule:\n def __init__(self):\n self.tree = SegmentTree(10 ** 9)\n\n def addRange(self, left: int, right: int) -> None:\n self.tree.update(left, right - 1, 1, self.tree.root)\n\n def queryRange(self, left: int, right: int) -> bool:\n return not not self.tree.querySum(left, right - 1)\n\n def removeRange(self, left: int, right: int) -> None:\n self.tree.update(left, right - 1, 0, self.tree.root)\n\n# Your RangeModule object will be instantiated and called as such:\n# obj = RangeModule()\n# obj.addRange(left,right)\n# param_2 = obj.queryRange(left,right)\n# obj.removeRange(left,right)\n"
96979701
}
96989702
]
96999703
},
@@ -13891,6 +13895,33 @@
1389113895
}
1389213896
]
1389313897
},
13898+
"maximum-running-time-of-n-computers":{
13899+
"id": "2141",
13900+
"name": "maximum-running-time-of-n-computers",
13901+
"pre": [
13902+
{
13903+
"text": "二分",
13904+
"link": null,
13905+
"color": "purple"
13906+
}
13907+
],
13908+
"keyPoints": [
13909+
{
13910+
"text": "证明总的可用电池大于等于总的分钟数是充要条件",
13911+
"link": null,
13912+
"color": "blue"
13913+
}
13914+
],
13915+
"companies": [],
13916+
"giteeSolution": "https://gitee.com/golong/leetcode/blob/master/problems/2141.maximum-running-time-of-n-computers.md",
13917+
"solution": "https://github.com/azl397985856/leetcode/blob/master/problems/2141.maximum-running-time-of-n-computers.md",
13918+
"code": [
13919+
{
13920+
"language": "py",
13921+
"text": "\n\nclass Solution:\n def maxRunTime(self, n: int, batteries: List[int]) -> int:\n def can(k):\n return sum([min(k, battery) for battery in batteries]) >= n * k\n l, r = 0, sum(batteries)\n while l <= r:\n mid = (l + r) // 2\n if can(mid):\n l = mid + 1\n else:\n r = mid - 1\n return r\n\n"
13922+
}
13923+
]
13924+
},
1389413925
"minimum-white-tiles-after-covering-with-carpets":{
1389513926
"id": "2209",
1389613927
"name": "minimum-white-tiles-after-covering-with-carpets",
@@ -14156,6 +14187,38 @@
1415614187
}
1415714188
]
1415814189
},
14190+
"maximum-xor-product":{
14191+
"id": "2939",
14192+
"name": "maximum-xor-product",
14193+
"pre": [
14194+
{
14195+
"text": "位运算",
14196+
"link": null,
14197+
"color": "blue"
14198+
}
14199+
],
14200+
"keyPoints": [
14201+
{
14202+
"text": "除了低n位,其他不受x异或影响",
14203+
"link": null,
14204+
"color": "blue"
14205+
},
14206+
{
14207+
"text": "对于每一位,贪心地使得异或结果为1,如果不能,贪心地使较小的异或结果为1",
14208+
"link": null,
14209+
"color": "blue"
14210+
}
14211+
],
14212+
"companies": [],
14213+
"giteeSolution": "https://gitee.com/golong/leetcode/blob/master/problems/2939.maximum-xor-product.md",
14214+
"solution": "https://github.com/azl397985856/leetcode/blob/master/problems/2939.maximum-xor-product.md",
14215+
"code": [
14216+
{
14217+
"language": "py",
14218+
"text": "\n\nclass Solution:\n def maximumXorProduct(self, a: int, b: int, n: int) -> int:\n axorx = (a >> n) << n # 低 n 位去掉,剩下的前 m 位就是答案中的 axorb 二进制位。剩下要做的是确定低 n 位具体是多少\n bxorx = (b >> n) << n\n MOD = 10 ** 9 + 7\n for i in range(n-1, -1, -1):\n t1 = a >> i & 1\n t2 = b >> i & 1\n if t1 == t2:\n axorx |= 1 << i\n bxorx |= 1 << i\n else:\n if axorx < bxorx:\n axorx |= 1 << i # 和一定,两者相差越小,乘积越大 \n else:\n bxorx |= 1 << i\n axorx %= MOD\n bxorx %= MOD\n return (axorx * bxorx) % MOD\n\n"
14219+
}
14220+
]
14221+
},
1415914222
"selling-pieces-of-wood":{
1416014223
"id": "5254",
1416114224
"name": "selling-pieces-of-wood",

0 commit comments

Comments
 (0)