【发布时间】:2021-08-11 21:54:01
【问题描述】:
我的方法是计算 HashMap 中每个元素的第一次和最后一次出现。然后维护数组的前缀和。然后根据第一次和最后一次出现计算总和。我的代码在示例测试用例中运行良好。但是在隐藏中失败了。
public static int maximumSum(ArrayList<Integer>arr) {
LinkedHashMap<Integer, Integer> first = new LinkedHashMap<>();
LinkedHashMap<Integer, Integer> last = new LinkedHashMap<>();
ArrayList<Integer> preSum = new ArrayList<>();
int curSum = 0;
int maxSum = 0;
preSum.add(arr.get(0));
for(int x : arr) {
first.put(x, -1);
last.put(x, -1);
}
for(int i=0; i<arr.size(); i++) {
if(first.get(arr.get(i)) == -1)
first.replace(arr.get(i), i);
}
for(int i=arr.size()-1; i>=0; i--) {
if(last.get(arr.get(i)) == -1)
last.replace(arr.get(i), i);
}
for(int i=1; i<arr.size(); i++)
preSum.add(arr.get(i)+preSum.get(i-1));
for(Map.Entry<Integer, Integer> e : first.entrySet()) {
curSum = 0;
int f = e.getValue();
int l = last.get(e.getKey());
if(f == 0 || l == 0)
curSum = preSum.get(l);
else
curSum = preSum.get(l)-preSum.get(f-1);
if(curSum > maxSum)
maxSum = curSum;
}
return maxSum;
}
【问题讨论】:
-
你愿意接受替代品吗?
-
是的..请帮忙
-
你能提供更多细节吗?整数只有正数吗?请提供输入示例及其预期输出