1
的最大值的問題是 - 你給出大小爲N的一個陣列和另一個整數M.你的目標是找到子陣列模的總和的最大值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);
很好的解釋..was思維,但堂妹的TreeSet中的O(nlogn)。但它比產生所有子集和檢查哪個會導致O(n2)更好, –