Javascript 我的磁带平衡解决方案Codibility性能有什么问题
这是我的解决方案,它没有通过性能要求。 据我所知,它与我查找的其他解决方案类似:Javascript 我的磁带平衡解决方案Codibility性能有什么问题,javascript,algorithm,puzzle,Javascript,Algorithm,Puzzle,这是我的解决方案,它没有通过性能要求。 据我所知,它与我查找的其他解决方案类似: function solution(A) { let slice = A.slice(1,A.length); let firstSliceSum = A[0]; let lastSliceSum = slice.reduce((a, b) => a + b); let smallestValue = Math.abs(firstSliceSum-lastSliceSum);
function solution(A) {
let slice = A.slice(1,A.length);
let firstSliceSum = A[0];
let lastSliceSum = slice.reduce((a, b) => a + b);
let smallestValue = Math.abs(firstSliceSum-lastSliceSum);
for(let i=1;i<A.length-1;i++){
let shift = slice.shift();
firstSliceSum=firstSliceSum+shift;
lastSliceSum=lastSliceSum-shift;
let diff = Math.abs(firstSliceSum-lastSliceSum);
if(diff<smallestValue)smallestValue=diff;
}
return smallestValue;
}
函数解决方案(A){
设slice=A.slice(1,A.length);
设firstSliceSum=A[0];
让lastSliceSum=slice.reduce((a,b)=>a+b);
设smallestValue=Math.abs(firstSliceSum-lasstslicesum);
这里有几个问题
- 正如所指出的,您正在循环中使用
shift()
,最终使代码成为O(n2)
- 其次,您也在考虑第一个索引
0
和,而前面提到的约束条件表示任何0<P
引用其中提到的问题陈述:
任何整数p,如0
- 因此,您必须从
1
计算到A.length-1
片段:
函数解决方案(A){
设slice=A.slice(1,A.length);
设firstSliceSum=A[0];
让lastSliceSum=slice.reduce((a,b)=>a+b);
设smallestValue=-1;
for(设i=1;i console.log(解决方案([3,1,2,4,3]);
您能够指定性能要求是什么吗?不是javascript专家,但shift()似乎有O(n)复杂性,因此可能值得用let shift=a[i];
@SaiBot yes似乎是shift()这是一个非常彻底的答案,并解释了一切!@somerandomusername很乐意帮助:)