哔哩哔哩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 }
复制代码

 

posted @   堤苏白  阅读(106)  评论(0编辑  收藏  举报
编辑推荐:
· 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应用必不可少的技术
点击右上角即可分享
微信分享提示