找到陣列中的最大值后退出回圈有問題。
作業是:
金字塔 #1 讓我們考慮長度為 n 的陣列 p 填充了 (1..n) 范圍內的唯一數字 - 例如 p=[1,3,4,2,5] (n=5)
每個數字代表金字塔的高度。假設,位于較高金字塔后面的較低金字塔不可見,確定從給定陣列的開頭(左側)和結尾(右側)可見有多少金字塔。以哈希格式回傳結果,格式如下:{left: x, right: y}
示例 1:輸入:p = [1,2,3,4,5]
輸出:{左:5,右:1}
說明:從左側我們可以看到所有 5 個金字塔,而從右側我們只能看到最高的一個
示例 2:輸入:p = [4,5,1,2,3]
輸出:{左:2,右:2}
解釋:從左邊我們可以看到4和5;右起:5 和 3
我的代碼:
array = [4,5,1,2,3]
left = 1
array.each_cons(2) do |first, second|
if first < second
left = 1
end
end
right = 1
array.reverse.each_cons(2) do |first, second|
if first < second
right = 1
end
end
puts hash = {left: left, right: right}
我需要在找到 array.max 后打破回圈并且不要增加迭代器。
你有什么想法?
uj5u.com熱心網友回復:
我認為根本問題不是退出回圈,而是正在執行的計算。
認為
p = [4,5,1,2,3,6,5]
這是觀察者從左側觀看建筑物時所看到的圖
[4,5,1,2,3,6,5]
■
0 -> ■ ■ ■
| ■ ■ ■ ■
^ ■ ■ ■ ■ ■
| ■ ■ ■ ■ ■ ■
^ ■ ■ ■ ■ ■ ■ ■
從左側看時,偏移 和 處的建筑物0(1分別具有和5的高度4)是可見的。從右側觀察時,可以看到位于偏移和(分別具有和的高度)的建筑物。566556
請注意,當且僅當建筑物高于它與觀察者之間的所有建筑物時,它才是可見的。因此,我們可以計算從左側看時可見的建筑物數量,如下所示。
def visible_from_left(p)
mx = 0
p.count do |x|
tf = x > mx
mx = [mx, x].max
tf
end
end
visible_from_left(p)
#=> 3
請參閱陣列#count。
為了確定從右側可見的建筑物的數量,我們可以簡單地使用visible_from_leftwithp.reverse作為它的引數。
def visible_from_right(p)
visible_from_left(p.reverse)
end
visible_from_right(p)
#=> 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/498156.html
