Leetcode--1004. 最大连续1的个数Ⅲ
給定一個由若干 0 和 1 組成的數(shù)組?A,我們最多可以將?K?個值從 0 變成 1 。
返回僅包含 1 的最長(連續(xù))子數(shù)組的長度。
?
示例 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]
粗體數(shù)字從 0 翻轉(zhuǎn)到 1,最長的子數(shù)組長度為 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]
粗體數(shù)字從 0 翻轉(zhuǎn)到 1,最長的子數(shù)組長度為 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,且當(dāng)前字段最后一位為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));
?? ? }
}
?
總結(jié)
以上是生活随笔為你收集整理的Leetcode--1004. 最大连续1的个数Ⅲ的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一章 计算机网络 3 标准化工作和相关
- 下一篇: 【剑指offer】面试题6:从尾到头打印