2017-05-25 22 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