這是我以前的question的後續。 假設我想在給定的排序數組中找到一對整數,它們的和爲給定數字x
。衆所周知的「一次通過」解決方案看起來像這樣:在排序後的數組中找到一對整數對的整數的函數式方法
def pair(a: Array[Int], target: Int): Option[(Int, Int)] = {
var l = 0
var r = a.length - 1
var result: Option[(Int, Int)] = None
while (l < r && result.isEmpty) {
(a(l), a(r)) match {
case (x, y) if x + y == target => result = Some(x, y)
case (x, y) if x + y < target => l = l + 1
case (x, y) if x + y > target => r = r - 1
}
}
result
}
你會如何建議寫功能沒有任何可變狀態?
我想我可以寫一個遞歸版本Stream
(斯卡拉的懶惰列表) 你可以建議一個非遞歸版本嗎?
此代碼不會與Scala編譯。 –
謝謝。將嘗試編譯和修復它。 – Michael
Hi @Michael。修正了這個問題。關於答案,我看到已經有很多:) – slouc