哔哩哔哩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 }
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术