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
输出:10
解释:
[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 10。

提示:

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

解题思路 通过一个对零计数的变量准确计数,再设计一个起点坐标,在通过循环控制零的数目,来保证与K相同,当不同时则跳过到下一个符合要求的序列中。

 1 class Solution {
 2     public int longestOnes(int[] A, int K) {
 3         int cnt=0;
 4         int pos=0;
 5         int ans=0;
 6         for(int i=0;i<A.length;i++){
 7             if(A[i]==0)cnt++;
 8             while(cnt>K){
 9                 if(A[pos]==0)cnt--;
10                 pos++;
11             }
12             ans=Math.max(ans,i-pos+1);
13         }
14
15         return ans;
16     }
17 }

原文地址:https://www.cnblogs.com/hwhWorld/p/10493739.html

时间: 2024-11-09 03:09:27

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

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;

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

领扣(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 &

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

485-最大连续1的个数

485-最大连续1的个数 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3. 注意: 输入的数组只包含 0 和1. 输入数组的长度是正整数,且不超过 10,000. 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/max-consecutive-ones 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请

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

数据库环境: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<<"