2017-05-25 57 views
0

道歉,如果這太簡單或以前曾問過,但我無法找到任何地方的解決方案。快速追蹤最長連線

我有一個函數,隨機產生'是'或'否'。我將如何跟蹤並存儲序列中最長連續的「否」?

在此先感謝!

回答

2

我曾經嘗試這樣做任何事情,而且你可以存儲在陣列中的所有紀錄值,然後找出它的最大值。以下是代碼。

var streak = 0 
var streakArr = [Int]() 

// This will generate the random values 

func randomBool() -> Bool { 

    return arc4random_uniform(2) == 0 
} 

for i in 0...10 { 

    let obj = randomBool() 

    if !obj { 

     streak += 1 

    } else { 

     streak = 0 

    } 

    streakArr.append(streak) 
} 

streakArr // OP- [1, 0, 1, 2, 0, 0, 0, 0, 1, 2, 3] 
streakArr.max() // will give you the maximum value ie. 3 
1

例如,讓說GenerateAnswear()是你的函數生成YesNo

func GenerateAnswear() -> String { 
    switch arc4random() % 2 { 
    case 0: 
     return "Yes" 
    default: 
     return "No" 
    } 
} 

讓我們聲明一個變量來存儲連勝初值0 要產生一排,我們做一個while循環一些answears。 在這個循環中,我們呼籲我們的方法GenerateAnswear()

var n = 10 
var streak = 0 

repeat { 
    let answear = GenerateAnswear() 
    streak = answear == "No" ? streak + 1 : 0 
    print(answear) 
    print("streak \(streak)") 
    n = n - 1 
} while n > 0 

要計算的No連勝我們驗證codition的answear如果等於No和分配,如果產生answear到超出當前streak值增長10是不同的,那麼No

streak = answear == "No" ? streak + 1 : 0 

這裏有從上面的代碼的eample輸出。 Streak值存儲在我們的局部變量中。你想用它做

No 
streak 1 
Yes 
streak 0 
Yes 
streak 0 
Yes 
streak 0 
No 
streak 1 
No 
streak 2 
No 
streak 3 
Yes 
streak 0 
Yes 
streak 0 
Yes 
streak 0