通過CodeFights工作。這是在第5級https://codefights.com/arcade/intro/level-5/XC9Q2DhRRKQrfLhb5問題4:當所有的跳躍長度相同並且某些位置不能落地時,我可以在整個範圍內移動的最小跳躍是多少?
您給出較位於一條直線上 障礙座標整數數組。
假設您從座標0的點跳到右邊的 。您只允許跳轉長度相同的長度爲 的某個整數。
找到足夠的最小長度以避免所有障礙。
例
對於inputArray = [5,3,6,7,9],輸出應該是 avoidObstacles(inputArray)= 4。
退房下面爲了更好地理解圖像:
輸入/輸出
[時限] 4000ms(RB)[輸入] array.integer INP utArray
非空數組的正整數。
限制條件:2≤inputArray.length≤10,1≤inputArray [I]≤40.
[輸出]整數
的期望的長度。
發生這種情況的自然方法似乎是一步一步。這裏是我的代碼:
def avoidObstacles(arr)
jumps = (arr.min..arr.max+1).reject{|n| arr.include?(n)}
full_map = (0..arr.max+1)
jumps.each do |j|
return j if full_map.step(j).none?{|n|arr.include?(n)}
end
end
我通過您的網站上提供的可視測試:
輸入:inputArray:
def avoidObstacles(arr) jumps = (arr.min..arr.max+1).to_a - arr full_map = (0..arr.max+1) jumps.each do |j| return j if (full_map.step(j).to_a & arr).empty? end end
寫這更明確的方式[5 ,3,6,7,9]預期輸出:4
輸入:inputArray:[2,3]預期輸出:4
輸入:inputArray:[1,4,10,6,2]預期輸出:7
但我得到的隱藏測試之一絆倒。我借用了其他用戶的解決方案,這在所有情況下工作:
def avoidObstacles a
obs = a.each_with_object(Hash.new(false)){|v, h| h[v]=true}
m = a.max
(1..m+1).each do |j|
return j if (0...m/j+1).all?{ |i| obs[i*j] == false }
end
m
end
我不太肯定這借來的解決方案成功和失敗礦。
非常感謝您的幫助。我對編碼還很陌生,非常感謝你的時間。
不太清楚我按照你的邏輯。如果我理解正確的是,返回的項目應該是一個足夠大的數字,它比每個項目之間的差異更大。假設這是正確的,爲什麼第二個答案是4 ...不應該是2.第一個和第三個似乎是按照我所說的,但第二個我失去了,如果它實際上是4.而你的範圍 - 數組邏輯也讓我感到困惑。 – grail
我添加了一個圖像來澄清。(範圍數組)陣列的燼將不會是一個合適的步驟間隔。我通過從範圍中減去數組來避免這些無意義的步驟方法測試。 – MattF
我想到了一種不使用數組減法和聯合來編寫代碼的方法,並且將其包含在編輯中。 – MattF