java – Max Double Slice Sum codility O(1)空间复杂性失败性能
我试图弄清楚为什么下面的解决方案在代码网站中的“Max Double Slice Sum”问题的单个性能测试案例中失败了:
https://codility.com/demo/take-sample-test/max_double_slice_sum
还有另一种解决方案O(n)空间复杂度更容易理解:Max double slice sum.但我只是想知道为什么这个O(1)解决方案不起作用.以下是实际代码: import java.util.*; class Solution { public int solution(int[] A) { long maxDS = 0; long maxDSE = 0; long maxS = A[1]; for(int i=2; i<A.length-1; ++i){ //end at i-index maxDSE = Math.max(maxDSE+A[i],maxS); maxDS = Math.max(maxDS,maxDSE); maxS = Math.max(A[i],maxS + A[i]); } return (int)maxDS; } } 这个想法很简单如下: >该问题可以作为查找max(A [i] A [i 1] … A [j] -A [m]); 1·; = I< = M< = J< = N-2;而n = A.length;我们称切片中的A [m]缺少元素. 现在,我们只使用i = 2的for循环; – > I =则为a.length-2;对于每个索引i,我们注意到一些发现: >如果缺少的元素是A [i],那么maxDSE [i] = maxS [i-1](最大总和 所以maxDSE [i] = Math.max(maxDSE [i-1] A [i],maxS [i-1]); 通过这种方式,maxDS将是最终结果. 但奇怪的是,我只能得到92%;一个失败的性能测试用例如下所示: medium_range 错误的答案 有谁可以请教我解决方案中的问题在哪里?谢谢! 解决方法
好的,我发现我的代码出错了.似乎我忘了一个角落的案例.当计算DSE [i]时,在A [i]缺少数字的情况下,maxS应该包含数组为空时的情况.换句话说,maxS应计算为:
maxS [i] = Math.max(0,Math.max(A [i] maxS [i-1],A [i]));而0是针对空子阵列的情况(在第i个结束时); Math.max(A [i] maxS [i-1],A [i])是具有至少一个元素的所有切片的最大值(在i-index处结束).完整代码如下: import java.util.*; class Solution { public int solution(int[] A) { long maxDS = 0; long maxDSE = 0; long maxS = A[1]; for(int i=2; i<A.length-1; ++i){ maxDSE = Math.max(maxDSE+A[i],maxS); maxDS = Math.max(maxDS,maxDSE); maxS = Math.max(0,Math.max(A[i],maxS + A[i])); } return (int)maxDS; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java-ee – EJB3:orm.xml:是否可以拥有多个orm.xml文件?
- 在Java中使用wait()和notify()进行阻止
- 在Java中使用无限流的并行处理
- java – 从.mp3或.wav文件计算频率?
- java – 使用JPA和Hibernate在Persistence.xml中配置C3P0
- Java公共/私有和静态修饰符如何影响在一行上声明的多个变量
- java – 迁移到Spring Annotated Controllers和传统的onSub
- java8的接口默认方法实例
- Java8 Lambda表达式
- java.io.FileNotFoundException: D:\e (拒绝访问。)