Leetcode--1004. 最大连续1的个数Ⅲ

mac2025-04-17  4

给定一个由若干 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。  

提示:

1 <= A.length <= 20000 0 <= K <= A.length A[i] 为 0 或 1 

思路:双指针,滑动窗口

提交的代码:

class Solution {     public int longestOnes(int[] nums, int k) {        int i=0,j=0,sum=0,max=0;             for(j=0;j<nums.length;)             {                 if(nums[j]==1)                 {                     sum++;                     j++;                 }                 else if(nums[j]==0&&k>0)                 {                     k--;                     sum++;                     j++;                 }                 else    //如果k为0,且当前字段最后一位为0,向后滑动,前面的字段开始退位                 {                     sum--;                     if(nums[i]==0)                     {                         k++;                     }                     i++;                 }                 max = Math.max(sum, max);             }             return max;     } }

完整的代码:

public class Solution1004 {      public static int longestOnes(int[] nums, int k) {             int i=0,j=0,sum=0,max=0;             for(j=0;j<nums.length;)             {                 if(nums[j]==1)                 {                     sum++;                     j++;                 }                 else if(nums[j]==0&&k>0)                 {                     k--;                     sum++;                     j++;                 }                 else                 {                     sum--;                     if(nums[i]==0)                     {                         k++;                     }                     i++;                 }                 max = Math.max(sum, max);             }             return max;         }      public static void main(String[] args)      {          int[] nums = {0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1};          int k =3;          System.out.println(longestOnes(nums,k));      } }  

最新回复(0)