現在有一堆排列整齊的木牌,每個高度都不一樣,寬度均為1,現在希望從這些木牌中找出可畫出的最大長方形
Input: [2,1,5,6,2,3]
Output: 10
先建立 temp 來存每一次長方形的面積,這樣就可以做比較, end 是要用來取陣列最後一個值,用 ary.length-1
input= [2,1,5,6,2,3]
output= 10
function rectangle(ary){
temp = 0
end = ary.length-1
return temp
}
function expect(a,b){
console.log( a == b )
}
expect(rectangle(input),output)
用 while 迴圈跑過整個陣列,當陣列中沒有任何值就中止 while 迴圈,現在的長方形面積就用陣列長度與陣列中最小值來算,當 temp 比 current 小,就把 temp 變成 current
Math.min(...ary) ,這個是先將目前陣列展開,再取這些數字中的最小值
input= [2,1,5,6,2,3]
output= 10
function rectangle(ary){
temp = 0
end = ary.length-1
while(ary.length!=0){
current = ary.length * Math.min(...ary)
if(temp < current){
temp = current
}
}
console.log(temp)
return temp
}
function expect(a,b){
console.log( a == b )
}
expect(rectangle(input),output)
去除木牌的方法就最左邊木牌高度與最右邊木牌高度比高低,把矮的去掉,去掉一個木牌,陣列長度也會變短一個,去除陣列數字的方法是用 pop() 與 shift(), 前者是拿出陣列尾端的值,後者是取出陣列最前端的值,這兩者都會改變原始陣列的狀況
input= [2,1,5,6,2,3]
output= 10
function rectangle(ary){
temp = 0
end = ary.length-1
while(ary.length!=0){
current = ary.length * Math.min(...ary)
if(temp < current){
temp = current
}
if(ary[0]<ary[end]){
ary.shift()
end -= 1
}else{
ary.pop()
end-=1
}
}
console.log(temp)
return temp
}
function expect(a,b){
console.log( a == b )
}
expect(rectangle(input),output)
今天到此為止,有任何問題請在下方留言或透過email、GitHub聯絡我,感謝閱讀
Daily kitty