PHP算法练习六:判断一个值是否在数组中连续出现三次

1. 题目分析

本题要求判断一个值是否在数组中连续出现三次。我们可以采用遍历数组的方法,依次查找是否有符合条件的值。具体而言,可以考虑用一个计数器来记录遍历过程中当前值的连续出现次数,如果达到3,返回true,否则返回false。

2. 解题思路

2.1. 遍历数组

我们首先需要遍历给定的数组,判断其中是否有连续出现三次的某个值。遍历过程中,需要对当前值进行判断,如果当前值与上一次的值相同,则说明有一个连续的值出现。否则,需要将当前值的连续出现次数重新置为1。

/**

* 判断一个值是否在数组中连续出现三次

*

* @param array $arr

* @param int|string $val

*

* @return bool

*/

function isTripleAppear(array $arr, $val): bool

{

$count = 1; // 连续出现的次数

for ($i = 1, $len = count($arr); $i < $len; $i++) {

if ($arr[$i] === $val && $arr[$i - 1] === $arr[$i]) {

$count++;

} else {

$count = 1;

}

if ($count === 3) {

return true;

}

}

return false;

}

2.2. 测试代码

我们需要编写一些测试代码来验证 isTripleAppear() 函数的正确性。我们可以使用 PHP Unit 进行测试,具体实现见下面的代码。

public function testTripleAppear()

{

$this->assertTrue(

isTripleAppear([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 1)

);

$this->assertTrue(

isTripleAppear(['a', 'b', 'b', 'b', 'c', 'd'], 'b')

);

$this->assertFalse(

isTripleAppear([1, 2, 3, 4, 5], 1)

);

$this->assertFalse(

isTripleAppear([1, 2], 1)

);

$this->assertFalse(

isTripleAppear([], 1)

);

}

运行测试代码后,我们可以得到如下输出:

PHPUnit 9.5.4 by Sebastian Bergmann and contributors.

Runtime: PHP 7.4.24

Configuration: /Users/username/Temp/phpunit.xml

. 5 / 5 (100%)

Time: 00:00.002, Memory: 6.00 MB

OK (5 tests, 5 assertions)

3. 总结

本文介绍了如何判断一个值是否在数组中连续出现三次,采用了遍历数组的方法,并在遍历过程中记录连续出现次数。本题相对简单,但是可以帮助我们更好地理解数组的遍历及计数相关的操作。

后端开发标签