You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算大小恰好为k的最小和子序列的数量?

嘿,这个问题其实很好解决,咱们拆解成两步走就清晰了:

问题核心理解

我们要找的是:在数组所有长度恰好为k的子序列里,那些和最小的子序列的数量。比如你给的例子,数组[1,2,3,4]、k=2时,最小和是1+2=3,只有1个这样的子序列,所以输出1。

解决步骤

第一步:锁定最小和的构成逻辑

要得到长度为k的最小和子序列,核心逻辑非常直观:必须选数组中最小的k个元素。只有选这k个最小的元素,它们的和才是所有k长度子序列里最小的,这是整个问题的前提。

第二步:计算重复元素的组合数

这里需要注意重复元素的情况,具体操作如下:

  • 先把数组排序,这样能快速定位到最小的k个元素。
  • 找到第k小的元素值(也就是排序后数组的第k-1位元素,因为索引从0开始),记为val。
  • 统计整个数组中val出现的总次数,记为total_count。
  • 统计排序后前k个元素里val出现的次数,记为required_count。
  • 最终的数量就是组合数C(total_count, required_count),也就是从total_count个val里选required_count个的选法数,公式为:total_count! / (required_count! * (total_count - required_count)!)。
实例验证

你的示例输入

数组[1,2,3,4]、k=2:
排序后是[1,2,3,4],第k小的元素是2。整个数组中2出现1次,前2个元素里2出现1次,组合数C(1,1)=1,和示例输出一致。

扩展示例

数组[1,1,2,2,3]、k=3:
排序后是[1,1,2,2,3],第k小的元素是2。整个数组中2出现2次,前3个元素里2出现1次,组合数C(2,1)=2,对应子序列[1,1,2(第一个)]和[1,1,2(第二个)],确实是2个。

伪代码实现
import math

def count_min_k_subsequences(arr, k):
    sorted_arr = sorted(arr)
    # 获取第k小的元素值
    target_val = sorted_arr[k-1]
    # 统计数组中target_val的总数量
    total_target = arr.count(target_val)
    # 统计前k个元素中target_val的数量
    needed_target = sorted_arr[:k].count(target_val)
    # 计算组合数
    return math.comb(total_target, needed_target)

# 测试你的示例
print(count_min_k_subsequences([1,2,3,4], 2))  # 输出:1

内容的提问来源于stack exchange,提问作者Priti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:32:08