- Leetcode 3428. Maximum and Minimum Sums of at Most Size K Subsequences
- 1. 解题思路
- 2. 代码实现
- 题目链接:3428. Maximum and Minimum Sums of at Most Size K Subsequences
1. 解题思路
这一题不需要连续性,因此我们就是考虑取得子串长度为别为1到k的情况下时,每一个元素作为最小的元素以及最大的元素时可以选取的方法总数。而这就是一个简单的排列组合的问题,假设一个元素有n和元素比他大,m个元素比他小,则在长度为k的子串当中其可以作为最大或者最小元素的选择方法总数就是: C n k − 1 + C m k − 1 C_n^{k-1} + C_m^{k-1} Cnk−1+Cmk−1。
我们将其翻译为python代码语言即可。
2. 代码实现
给出python代码实现如下:
MOD = 10**9+7
Factorials = [1 for _ in range(10**5+1)]
Revs = [1 for _ in range(10**5+1)]
for i in range(2, 10**5+1):
Factorials[i] = (i * Factorials[i-1]) % MOD
Revs[i] = pow(Factorials[i], -1, mod=MOD)
def C(n, m):
return (Factorials[n] * Revs[n-m] * Revs[m]) % MOD if n >= m else 0
class Solution:
def minMaxSums(self, nums: List[int], k: int) -> int:
nums = sorted(nums)
n = len(nums)
ans = 0
for i, x in enumerate(nums):
for m in range(1, k+1):
ans = (ans + x * (C(i, m-1) + C(n-1-i, m-1))) % MOD
return ans
提交代码评测得到:耗时8359ms,占用内存37.6MB。