classSolution: defnumOfUnplacedFruits(self, fruits: List[int], baskets: List[int]) -> int: n = len(fruits) count = 0 for i inrange(n): fruit = fruits[i] for j inrange(n): if fruit <= baskets[j]: count += 1 baskets[j] = 0# 放完了剩余容量置为0 break
return n - count
Q2 选出和最大的K个元素
题目描述
给你两个整数数组,nums1 和 nums2,长度均为 n,以及一个正整数 k 。
对从 0 到 n - 1 每个下标 i ,执行下述操作:
找出所有满足 nums1[j] 小于 nums1[i] 的下标 j 。
从这些下标对应的 nums2[j] 中选出 至多k 个,并 最大化 这些值的总和作为结果。
返回一个长度为 n 的数组 answer ,其中 answer[i] 表示对应下标 i 的结果。
示例 1:
输入:nums1 = [4,2,1,5,3], nums2 = [10,20,30,40,50], k = 2
classSolution: deffindMaxSum(self, nums1: List[int], nums2: List[int], k: int) -> List[int]: n = len(nums1) ans = [0] * n items = sorted([(nums1[i], nums2[i], i) for i inrange(n)], key=lambda x: x[0])
groups = [] current_group = [] prev_num = None
for item in items: num = item[0] if prev_num isnotNoneand num != prev_num: groups.append(current_group) current_group = [] current_group.append(item) prev_num = num if current_group: groups.append(current_group)
sum_k = 0 heap = []
for group in groups: # 设置该组所有元素的answer为当前总和 for num, val, idx in group: ans[idx] = sum_k
# 处理该组的nums2值,降序排序后尝试加入堆 vals = [item[1] for item in group] vals.sort(reverse=True)
for val in vals: iflen(heap) < k: heapq.heappush(heap, val) sum_k += val else: if val > heap[0]: sum_k += val - heapq.heappop(heap) heapq.heappush(heap, val)
classSolution: defmaxSubarrays(self, n: int, conflictingPairs: List[List[int]]) -> int: group = [[] for _ inrange(n + 1)] for a, b in conflictingPairs: if a > b: a, b = b, a group[a].append(b)
ans = 0 extra = [0] * (n + 2) b = [n + 1, n + 1] # 最小b和次小b for a inrange(n, 0, -1): b = sorted(b + group[a])[:2] ans += b[0] - a extra[b[0]] += b[1] - b[0]