Skip to content

Latest commit

 

History

History

1981.Minimize-the-Difference-Between-Target-and-Chosen-Elements

1981.Minimize-the-Difference-Between-Target-and-Chosen-Elements

此题类似于分组背包问题。每组物品里只能取一个,求如何选取物品最接近target。

背包问题的思想核心就是以容量为考察点。选择完第一组物品会占据哪些容量。将这些可能的容量,再与第二组物品两两组合,得到第二轮结束后可能会占据哪些容量。依次处理完所有组,就可以得到最终可能会占据哪些容量,再挑选其中与target最接近的一个。

因为最多有70组,每个物品最多是70,最终总容量的可能性是70*70=4900,所以每一个回合需要遍历4900种容量,并且与下一组的70个物品两两组合。总共70个回合。所以总的时间复杂度是4900*70*70. 这样的复杂度太大了,哪里可以优化呢?

本题的target不超过800,所以每一个回合时,任何大于target的容量,我们只保留最小的一个即可。因为其他更大的容量(随着更多物品的累积)必然与target的差距会更大。所以每一个回合我们只需要遍历801种容量即可。于是时间复杂度就降下来了。