1
最近,我在解決另一個問題時遇到了這個問題。我自己有一個解決方案。但我對它的時間複雜性並不滿意。所以,我正在轉向你們提供更好的解決方案。問題如下:最小化數組中最大值的分配策略
假設有一個整數數組int arr[N]
。我手裏有一個整數值val
,分配給arr
。例如,我可以通過val
或arr[2]
增加arr[0]
,1
和arr[3]
,val - 1
等等。我們的目標是儘量減少分配後arr
的最大值。可能有多種解決方案,任何人都可以做。
我現在的解決方案如下。這是微不足道的,需要O(val)
時間。我有一種感覺,更好的解決方案存在。
for (int i = 0; i < val; ++i) {
// increase the minimum value in arr by 1
}
在你的方法中,你忘記考慮在'arr'中找到最小元素的複雜性,所以它是'O(val * cost_to_find_min)'。爲了找到最小值,你可以在開始時使用堆或排序元素,並儘量保持平衡等。 – nikihub