题目
- 找出数组中的所有 K 近邻下标
- 统计可以提取的工件
- K 次操作后最大化顶端元素
- 得到要求路径的最小带权子图
题解
只做出来前3道,最后一题只知道用dijkstra算法,但没有太多时间进一步考虑,还是不够熟练。
6031 找出数组中的所有 K 近邻下标
class Solution:
def findKDistantIndices(self, nums: List[int], key: int, k: int) -> List[int]:
key_index = []
for i in range(len(nums)):
if nums[i]==key:
key_index.append(i)
ret_set = set()
for index in key_index:
for i in range(index-k, index+k+1):
if 0<=i<len(nums):
ret_set.add(i)
return list(ret_set)
5203 统计可以提取的工件
class Solution:
def digArtifacts(self, n: int, artifacts: List[List[int]], dig: List[List[int]]) -> int:
dig_set = set(((l[0],l[1]) for l in dig))
ret = 0
for art in artifacts:
r1i, c1i, r2i, c2i = art
flag = True
for r in range(r1i, r2i+1):
for c in range(c1i, c2i+1):
if (r, c) not in dig_set:
flag = False
break
if not flag:
break
if flag:
ret += 1
return ret
5227 K 次操作后最大化顶端元素
class Solution:
def maximumTop(self, nums: List[int], k: int) -> int:
n = len(nums)
min_val, max_val = min(nums), max(nums)
# 元素全部相等,可能出现空栈的情况
if min_val==max_val: