给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。
返回仅包含 1 的最长(连续)子数组的长度。
示例 1:
输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
输出:6
解释:
[1,1,1,0,0,1,1,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 6。
示例 2:
输入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
输出:10
解释:
[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 10
PHP代码如下
class Solution { public static $max=0; /** * @param Integer[] $A * @param Integer $index //0的位置 * @param Integer $K * @return Integer */ function longestOnes($A,$index, $K) { if($K==0|| $index==count($A) ){ $tmp=0;//开始统计计数连续1的个数 for($i=0;$i<count($A);$i++){ if($A[$i]==1){ $tmp++; self::$max = max(self::$max, $tmp); } else{ //中间有0 计数清0 $tmp=0; } } return self::$max ;//结束 } // 从上次0的位置开始循环 for($j=$index;$j<count($A);$j++){ // echo $index.'---'."\n"; if($A[$j]==0){ $A[$j]=1; $this->longestOnes($A,$j,$K-1); $A[$j]=0; }elseif ($j==count($A)-1){ $this->longestOnes($A,$j,$K-1); } } return self::$max; } } $a = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1]; $obj = new Solution(); $count = $obj->longestOnes($a,0,3); echo $count."\n";