Leetcode 3645. Maximum Total from Optimal Activation Order
- Leetcode 3645. Maximum Total from Optimal Activation Order
- 1. 解题思路
- 2. 代码实现
- 题目链接:3645. Maximum Total from Optimal Activation Order
1. 解题思路
这一题我的思路上是一个滑动窗口的思路。
策略上来说的话就是尽可能多取,然后每次取尽可能取最大的数。因此,我们首先将所有的数字按照limit进行排序,然后对于相同的limit,按照val进行倒序排序,然后依次进行选取。
每一次选取,如果能选就直接选,然后更新当前active的数的状态即可。
2. 代码实现
给出python代码实现如下:
class Solution:def maxTotal(self, value: List[int], limit: List[int]) -> int:arr = sorted([(val, lmt) for val, lmt in zip(value, limit)], key=lambda x: (x[1], -x[0]))status = [0 for _ in arr]i, j, n = 0, 0, len(arr)active, ans = 0, 0while j < n:val, lmt = arr[j]if active < lmt:status[j] = 1ans += valactive += 1if active == lmt:while j < n and arr[j][1] == active:j += 1else:j += 1while i < j and arr[i][1] <= active:active -= status[i]i += 1return ans
提交代码评测得到:耗时407ms,占用内存48.02MB。