3765. 完全质数 - 力扣(LeetCode)
题目类型
#数学
解题思路
参考:这道题很简单!
示例代码
python
class Solution:
def completePrime(self, num: int) -> bool:
s = str(num)
n = len(s)
def is_prime(n):
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True if n > 1 else False
flag = True
for i in range(1, n + 1):
x = int(s[:i])
flag &= is_prime(x)
y = int(s[-i:])
flag &= is_prime(y)
return flag3766. 将数字变成二进制回文数的最少操作 - 力扣(LeetCode)
题目类型
#预处理 #二分
解题思路
参考:这道题很简单!
示例代码
python
cnt = []
for x in range(1, 5001):
s = bin(x)[2:]
if s == s[::-1]:
cnt.append(x)
class Solution:
def minOperations(self, nums: List[int]) -> List[int]:
n = len(nums)
ans = [inf] * n
for i, x in enumerate(nums):
idx = bisect_left(cnt, x)
for j in range(max(0, idx - 5), min(len(cnt), idx + 5)):
ans[i] = min(ans[i], abs(cnt[j] - x))
return ans3767. 选择 K 个任务的最大总分数 - 力扣(LeetCode)
题目类型
#贪心 #排序
解题思路
参考:这道题很简单!
示例代码
python
class Solution:
def maxPoints(self, t1: List[int], t2: List[int], k: int) -> int:
t = sorted([[x, y] for x, y in zip(t1, t2)], key=lambda p: p[1] - p[0])
ans = 0
for x, y in t:
if k:
ans += x
k -= 1
elif x > y:
ans += x
else:
ans += y
return ans3768. 固定长度子数组中的最小逆序对数目 - 力扣(LeetCode)
题目类型
#树状数组 #有序集合 #离散化 #定长滑窗
解题思路
滑窗的同时,实时维护窗口内的逆序对个数 。
- 元素 进入窗口时, 增加了窗口内的大于 的元素个数。
- 元素 离开窗口时, 减少了窗口内的小于 的元素个数。
示例代码
python
class Solution:
def minInversionCount(self, nums: List[int], k: int) -> int:
n = len(nums)
d = {x: i for i, x in enumerate(sorted(set(nums)), 1)}
m = len(d)
tree = FenwickTree(m + 1)
cur = 0
ans = k * (k - 1) // 2
pre = [0] * (n + 1)
for i, x in enumerate(nums, 1):
cur += tree.range_query(d[x] + 1, m)
tree.update(d[x], 1)
if i < k:
continue
ans = min(ans, cur)
cur -= tree.range_query(1, d[nums[i - k]] - 1)
tree.update(d[nums[i - k]], -1)
return anspy
class Fenwick:
__slots__ = ["n", "c"]
def __init__(self, n):
self.n = n
self.c = [0] * (n + 1)
def update(self, x: int, delta: int):
while x <= self.n:
self.c[x] += delta
x += x & -x
def query(self, x: int) -> int:
s = 0
while x > 0:
s += self.c[x]
x -= x & -x
return s