選陣列中三個元素,得到乘積的最大值
input1 = [1,2,3]
output1 = 6
input2 = [1,2,3,4]
output2 = 24
先依照數字大小排列,只要從陣列後方取數字一定可以拿到大的值,把這些數字拿去乘,一定可以得到乘積最大值
input1 = [1,2,3]
output1 = 6
input2 = [1,2,3,4]
output2 = 24
function maxProduct(ary){
sortAry = ary.sort((x,y)=>{return x-y})
a = sortAry.pop()
b = sortAry.pop()
c = sortAry.pop()
return a*b*c
}
function expect(a,b){
console.log( a == b)
}
expect(maxProduct(input1),output1)
expect(maxProduct(input2),output2)
在寫這一題的時候我想到了一點,萬一陣列中有負數該怎麼辦,負數乘負數變正數,或許我需要先將傳入的陣列每一個元素先取絕對值,在排序,取數字相乘
input1 = [1,2,3]
output1 = 6
input2 = [1,2,3,4]
output2 = 24
function maxProduct(ary){
ary = ary.map(x => Math.abs(x))
sortAry = ary.sort((x,y)=>{return x-y})
a = sortAry.pop()
b = sortAry.pop()
c = sortAry.pop()
return a*b*c
}
function expect(a,b){
console.log( a == b)
}
expect(maxProduct(input1),output1)
expect(maxProduct(input2),output2)
目前的做法時間複雜度頗高,做了 map sort , map 跑一圈, sort 會跑到好,這樣加總時間複雜度就上去了 ,如果有更好的方法請告訴我
今天到此為止,有任何問題請在下方留言或透過email、GitHub聯絡我,感謝閱讀
Daily kitty