最近沉迷 leetcode,写写题解ψ(`∇´)ψ
题面描述
大致意思是给你一个包含正负整数的数组 a a a,然后你可以在里面选若干个数加到一起得到一个和(这个和的值可能会有重复,可以不取),现在问你在所有的可能中,第 k k k 大的和是多少。
元素最多 1 0 5 10 ^ 5 105 个, k k k 最大是 2000 2000 2000。
题解
排序
这个不用多说,为了后面好搞。
一个小问题
在一堆正整数里面,选择若干个元素求和,在所有的和中,第 k 小的和是多少。
可以借助优先队列进行动态规划, ( s u m , i ) (sum, i) (sum,i) 表示选择的最后一个元素下标是 i i i,并且选择的元素之和是 s u m sum sum,那么借助 ( s u m , i ) (sum, i) (sum,i) 我们可以得到 ( s u m + a i + 1 , i + 1 ) ( s u m + a i + 1 − a i , i + 1 ) (sum + a_{i+1}, i + 1)(sum + a_{i + 1} - a_i, i + 1) (sum+ai+1,i+1)(sum+ai+1−ai

本文介绍了如何使用排序和动态规划结合优先队列解决LeetCode题目,计算给定数组中正负整数选择若干个元素求和,找到第k大的和的方法。作者通过实例和代码展示了如何将问题转化为求解所有可能和的序列,并利用优先队列保证取值顺序。

1236

被折叠的 条评论
为什么被折叠?



