假设我有20号和数字组n" n这里只有4例如#34; {7,2,9,3}
我想知道大于20的最接近的值和小于20的最接近的值,我可以从单个元素或从数组中添加多个元素。
我不确定应该使用哪种数据结构或算法
谢谢!
答案 0 :(得分:0)
它被称为背包问题(嗯,你的问题是一个微小的变化,但它并不重要)。
如果数字总和相当低(状态为总和,则值为真或假,取决于此总和是否可达),您可以使用动态编程。这种方法的时间复杂度为O(N * SUM)
。
如果数组的数字元素很小,您还可以迭代所有子集并计算每个子集的总和(它需要O(2^N * Poly(N))
时间)。
如果元素的数量很少,但不是很小,你可以使用中间相遇技术使之前的解决方案稍微好一些(O(2^(N/2) * Poly(N)
)。