哔哩哔哩2021校园招聘后端开发方向笔试卷B 第三题 最长连续子数组
题目:
给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 ,返回仅包含 1 的最长(连续)子数组的长度
输入例子1:
[1,1,1,0,0,0,1,1,1,1,0],2
输出例子1:
6
例子说明1:
可以将输入中的第3个0和第4个0变成1,新数组为[1,1,1,0,0,1,1,1,1,1,1],因此最长连续1的子数组长度为6
输入例子2:
[0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1],3
输出例子2:
10
例子说明2:
可以将输入中的第3个0、第4个0,第5个0都变成1,新数组为[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1],因此最长连续1的子数组长度为10
代码:
//暴力法,直接从第一个元素开始遍历,找出以此为开始位置的长度,比较每个索引的长度,就可求得结果。
1 import java.util.*; 2 3 4 public class Solution { 5 /** 6 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 7 * 8 * @param arr int整型一维数组 9 * @param k int整型 允许0变为1的个数 10 * @return int整型 11 */ 12 public int GetMaxConsecutiveOnes (int[] arr, int k) { 13 // write code here 14 15 if(arr.length<=k){ 16 return arr.length; 17 } 18 19 20 int i=0; 21 int max=0; 22 while(i<arr.length-k){ 23 int count=0; 24 int j = i; 25 for (; j < arr.length ; j++) { 26 if(arr[j]!=1){ 27 count++; 28 } 29 if(count>k){ 30 max=max>j-i?max:j-i; 31 break; 32 } 33 } 34 if(j==arr.length){ 35 max=max>j-i?max:j-i; 36 } 37 38 i++; 39 } 40 return max; 41 42 } 43 }