【发布时间】:2016-06-08 11:14:01
【问题描述】:
问题是 - 给你一个大小为 N 的数组和另一个整数 M。你的目标是找到子数组模 M 的和的最大值。
If array is {3 3 9 9 5} and M is {7}
可能的子数组是
{3},{3},{9}.{9}.{5}
{3,3},{3,9},{9,9},{9,5}
{3,3,9},{3,9,9},{9,9,5}
{3,3,9,9},{3,9,9,5},{3,3,9,9,5}
其中以 7 为模的最大可能总和将为 6。子数组 {3,3} 具有最大总和。
我遇到了解决方案,但无法理解逻辑
static void solve(long M, long[] array){
TreeSet<Long> sumSet = new TreeSet<Long>();
long best = 0;
long sum = 0;
for(int i = 0; i < array.length; i++){
sum = (sum + array[i]) % M;
Long up = sumSet.higher(sum);
if(up == null){
best = Math.max(best,sum);
} else {
best = Math.max(best, M - up + sum);
}
sumSet.add(sum);
}
System.out.println(best);
}
线是什么意思
best = Math.max(best, M - up + sum);
【问题讨论】:
标签: arrays dynamic-programming