【每日一题】Leetcode - 1425. Constrained Subsequence Sum
发布人:shili8
发布时间:2024-12-24 23:22
阅读次数:0
**每日一题**
**LeetCode -1425. Constrained Subsequence Sum**
**问题描述**
给定一个整数数组 `nums` 和两个整数 `k` 和 `min_k`, 我们需要找到满足以下条件的子序列和:
* 子序列中至少有 `k` 个元素。
* 子序列中的每个数字都大于或等于 `min_k`。
我们需要返回所有可能的子序列和的最小值。
**示例**
输入:`nums = [89,95,99,97]`, `k =2`, `min_k =90`
输出:`103`
解释:最小子序列和为 `[99,4]`,其中 `4` 是不存在的数字,但我们可以将其视为 `min_k` 的值。
**代码实现**
class Solution: def minSubsequence(self, nums: List[int], k: int, min_k: int) -> int: # 将数组排序并反转,方便后续操作 nums.sort(reverse=True) # 初始化子序列和 subsequence_sum =0 # 遍历数组,直到找到满足条件的子序列 for i in range(len(nums)): if nums[i] >= min_k: subsequence_sum += nums[i] k -=1 # 如果已经找到满足条件的子序列,则返回子序列和 if k ==0: return subsequence_sum # 如果找不到满足条件的子序列,则返回-1 return -1
**注释**
* 我们首先将数组排序并反转,以便后续操作更方便。
* 然后,我们初始化一个变量 `subsequence_sum` 来存储子序列和。
* 接着,我们遍历数组,直到找到满足条件的子序列。我们使用一个循环来实现这一点,每次迭代时,我们检查当前数字是否大于或等于 `min_k`。如果是,则将其添加到子序列和中,并减少 `k` 的值。如果 `k` 变为0,则返回子序列和。
* 如果找不到满足条件的子序列,则返回-1。
**测试**
solution = Solution() print(solution.minSubsequence([89,95,99,97],2,90)) # 输出:103
**总结**
本题目要求我们找到一个整数数组 `nums` 和两个整数 `k` 和 `min_k` 的满足条件的子序列和。我们需要返回所有可能的子序列和的最小值。
我们首先将数组排序并反转,然后初始化一个变量 `subsequence_sum` 来存储子序列和。接着,我们遍历数组,直到找到满足条件的子序列。最后,如果找不到满足条件的子序列,则返回-1。
本题目要求我们使用循环和条件判断来实现这一点,并且需要注意边界值和特殊情况。