我想知道如何表达每个系数的最小总和。 Sum必须为零,并且列表的整数可以与每个系数相乘。
例如:( - 5, - 2,3,7)将总和设为0,
如果-5具有系数2,则 3有系数1, 7具有系数1 然后-5 * 2 + 3 * 1 + 7 * 1 = 0,系数之和为2 + 1 + 1 = 4.
另外,如果-5具有系数1,则 -2有系数1, 7具有系数1 然后-5 * 1 +( - 2 * 1)+ 7 * 1 = 0,系数之和为1 + 1 + 1 = 3.
因此,最小系数之和为3.
我认为这个问题可以像硬币改变算法一样解决。
所以我决定修改硬币改变算法代码。 以下是硬币更改算法示例代码。
之前我使用了arraylist,然后,我看到了建议,所以我修改了代码,就像使用hashmap一样。但是,问题是硬币包含( - )减去值,并且sum必须为零,所以下面的代码出现错误。
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map.Entry;
public class CoinChange {
public static void main(String[] args) {
int[] coins = {-37,35,2,5};
int amt = 0;
makeChange(coins, amt);
}
public static void makeChange(int[] coins, int amount){
//Sorting the coins
Arrays.sort(coins);//[-37, 2, 5, 35]
//System.out.println(Arrays.toString(coins));
//System.out.println(amount);
int n = coins.length - 1;
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
while(amount > 0)
{
if(coins[n] <= amount)
{
int val = 1;
if(map.containsKey(coins[n]))
{
val = map.get(coins[n]);
val = val+1;
}
map.put(coins[n], val);
amount = amount - coins[n];
}
else
{
n--;
}
}
for(Entry<Integer, Integer> entry: map.entrySet()){
System.out.println(entry.getKey() +":" + entry.getValue());
}
}
}