iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0
自我挑戰組

菜雞的30天工程師轉職日記--Leetcode系列 第 14

Day 14 -- Maximum Product of Three Numbers

  • 分享至 

  • xImage
  •  

Day14 Leetcode Array系列---- Maximum Product of Three Numbers

本次題目 Maximum Product of Three Numbers by JS

選陣列中三個元素,得到乘積的最大值

input1 = [1,2,3]
output1 = 6

input2 = [1,2,3,4]
output2 = 24

思考路線

  1. 先排序
  2. 取最後三個元素

Coding Time

先依照數字大小排列,只要從陣列後方取數字一定可以拿到大的值,把這些數字拿去乘,一定可以得到乘積最大值

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


上一篇
Day 13 -- Reshape the Matrix
下一篇
Day 15 -- Min Cost Climbing Stairs
系列文
菜雞的30天工程師轉職日記--Leetcode30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言