LeetCode995.Minimum Number of K Consecutive Bit Flips(K 连续位的最小翻转次数 )

995.Minimum Number of K Consecutive Bit Flips(K 连续位的最小翻转次数 )

Description

In an array A containing only 0s and 1s, a K-bit flip consists of choosing a (contiguous) subarray of length K and simultaneously changing every 0 in the subarray to 1, and every 1 in the subarray to 0.

Return the minimum number of K-bit flips required so that there is no 0 in the array. If it is not possible, return -1.


在仅包含 01 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 0

返回所需的 K 位翻转的次数,以便数组没有值为 0 的元素。如果不可能,返回 -1

题目链接:https://leetcode.com/problems/minimum-number-of-k-consecutive-bit-flips/
个人网站:http://redtongue.cn or http://redtongue.github.io/

Difficulty: hard

Example 1:

Input: A = [0,1,0], K = 1
Output: 2
Explanation: Flip A[0], then flip A[2].

Example 2:

Input: A = [1,1,0], K = 2
Output: -1
Explanation: No matter how we flip subarrays of size 2, we can't make the array become [1,1,1].

Example 3:

Input: A = [0,0,0,1,0,1,1,0], K = 3
Output: 3
Explanation:
Flip A[0],A[1],A[2]: A becomes [1,1,1,1,0,1,1,0]
Flip A[4],A[5],A[6]: A becomes [1,1,1,1,1,0,0,0]
Flip A[5],A[6],A[7]: A becomes [1,1,1,1,1,1,1,1]

Note:

  • 1 <= A.length <= 30000
  • 1 <= K <= A.length

分析

  • updating

参考代码

class Solution(object):
def minKBitFlips(self, A, K):
    index=0
    Sum=0
    li=[0]*len(A)
    i=0
    while(i < (len(A))):
        index ^= li[i]
        if(A[i]^index == 0):
            Sum += 1
            index ^= 1
            if(i+K<len(A)):
                li[i+K] ^= 1
            if(i+K>len(A)):
                return -1
        i+=1
    return Sum
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值