1004.最大连续1的个数III

public class Main {
     public int longestOnes(int[] A, int K) {
        //  count 是记录最长的长度
         int count = 0;
         //如果K>=A.length 说明A所有0的位置都可以变成1
            if (K >= A.length)
                return A.length;
            //另外
            else
            {//zoreSum 记录 i 遍历1到另外一个1之后的0的数量//flag记录第一个滑动窗口的左边位置 ,右边位置为i
                int zoreSum = 0;
                int flag = 0;
                for (int i = 0; i < A.length; i++) {
                    if (A[K] != 1)
                    {
                        zoreSum++;
                    }
                    //如果超过K个0 如K=3 zoreSum=4   "111"100001->00010"111"1
                    //zoreSum =3 的话 还可以连在一起 "111"10001 ->01"111"1
                    while (zoreSum > K) {
                        if (A[flag] == 0)
                        {
                            zoreSum--;
                        }
                        flag++;
                    }
                    //zoreSum 减到K 则回复正常
                    count = Math.max(count, i - flag + 1);
                }
            }
            return count;
        }

动态规划解法
用两个for

public int longestOnes(int[] A, int K) {
    int max = 0;
    int[] cur = new int[K+1];
    for(int i = 0; i < A.length; ++i) {
        for(int j = K; j >= 0; --j) {
            if(A[i] == 1) {
                cur[j]++;
            }
            else {
                if(j == 0) {
                    cur[j] = 0;
                }
                else {
                    cur[j] = cur[j-1] + 1;
                }
            }
            max = Math.max(max, cur[j]);
        }
    }
    return max;
}

原文地址:https://www.cnblogs.com/cznczai/p/11150488.html

时间: 2024-10-30 03:44:05

1004.最大连续1的个数III的相关文章

leetcode 最大连续1的个数 III

1004. 最大连续1的个数 III 给定一个由若干 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

Light oj 1138 - Trailing Zeroes (III) 【二分查找 &amp;&amp; N!中末尾连续0的个数】

1138 - Trailing Zeroes (III) PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in decimal notation. As you know N! = 1*2*...*N. F

统计数列中是连续数的个数

数据库环境:SQL SERVER2008R2 今天在群里看到一位网友提的需求,要求统计一组数据中前3位是连续数的个数,具体看贴图. 实现这个需求蛮简单的,说下我的思路: 取前3位,然后减去123,再和111求余,如果结果是0,说明这3位数连续. 是不是很简单呀,下面直接上代码. /*数据准备*/ WITH x0 AS ( SELECT 1234 AS tn UNION ALL SELECT 1235 AS tn UNION ALL SELECT 1236 AS tn UNION ALL SELE

(笔试题)N!尾部连续0的个数

题目: 对任意输入的正整数N,编写C程序求N!的尾部连续0的个数,并指出计算复杂度.如:18!=6402373705728000,尾部连续0的个数是3. (不用考虑数值超出计算机整数界限的问题) 思路: 1.直接计算N!的值,然后统计尾部0的个数,时间复杂度O(n): 2.发散思维,想想尾部为0的数是怎么得到的? 很容易想到2*5即可得到0,则N!可以表示为k*(2^m)*(5^n),由于在N!中m>>n,因此N!=k'*(2*5)^n,即n为尾部为0的个数. 由此,我们只要考虑N!中包含多少

统计连续数的个数

#include<iostream> using namespace std; void count() { int value; int cnt; int curvalue; if(cin>>curvalue) { cnt=1; while(cin>>value) { if(curvalue==value) cnt++; else { cout<<"current value:"<<curvalue<<"

485 Max Consecutive Ones 最大连续1的个数

给定一个二进制数组, 计算其中最大连续1的个数.示例 1:输入: [1,1,0,1,1,1]输出: 3解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.注意:    输入的数组只包含 0 和1.    输入数组的长度是正整数,且不超过 10,000.详见:https://leetcode.com/problems/max-consecutive-ones/description/ C++: class Solution { public: int findMaxConsecu

领扣(LeetCode)最大连续1的个数 个人题解

给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3. 注意: 输入的数组只包含 0 和1. 输入数组的长度是正整数,且不超过 10,000. 思路比较简单的.找到1出现的位置,遍历完剩下的1,如果1的个数刷新了1的最大值,就更新最大值,并且从新的位置继续遍历. 代码如下: 1 class Solution { 2 public int findMaxConsecutiv

LeetCode(485. 最大连续1的个数)

问题描述 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3. 注意: 输入的数组只包含 0 和1. 输入数组的长度是正整数,且不超过 10,000. 解决方案 class Solution: def findMaxConsecutiveOnes(self, nums): """ :type nums: List[int] :rtype: int &

[Swift]LeetCode485. 最大连续1的个数 | Max Consecutive Ones

Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: [1,1,0,1,1,1] Output: 3 Explanation: The first two digits or the last three digits are consecutive 1s. The maximum number of consecutive 1s is 3.  Note: