Day 4: LeetCode 995. Minimum Number of K Consecutive Bit Flips(v2)

Tag:随意刷-已写过(另解)

Source:

995. Minimum Number of K Consecutive Bit Flips

1.题意:

In: nums,k
Out: 最小Flip次数

由0与1所组成的nums;
k为连续几bit做一次Flip;
目的为藉由Flip,使得最後nums是皆为1的array。
要连续k bit(s)做Flip才是Flip,无法则视为无解(return -1)。

如果存在无法经由Flip使得最後nums是皆为1的array的情况,
则无解(return -1) aka 没有完整flip.
Ex:

Input: nums = [1,1,0], k = 2
Output: -1
Explanation: No matter how we flip subarrays of size 2,
we cannot make the array become [1,1,1].

2.思路:

作法:

建立一阵列为diff,标记结束flip的位置为(-1)

Ex:

3.程序码:

class Solution:
    def minKBitFlips(self, nums: List[int], k: int) -> int:
        # diff = [] the same size as nums
        # to be flip or not to flip is a question
        n = len(nums)
        diff = [0]*(n)
        flip = 0
        res  = 0
        for i in range(n):
            flip+=diff[i]
            # if flip+nums[i] == 0 => flip=0,nums[i]=0 => %2==0
            # if flip+nums[i] == 2 => flip=1,nums[i]=1 => %2==0
            # if flip+nums[i] == 1 => either flip or nums[i] is 1 => %2!=0
            
            # Need to be flip
            if (flip+nums[i])%2==0:
                if i+k>n:
                    return (-1)
                flip+=1
                if i+k<n:
                    diff[i+k]=(-1)
                res+=1
        return res        

Result:

Track:

Level:Hard

Related Question:


<<:  Consistency and Consensus (3-3) - Total Order Broadcast

>>:  [Day 05] 产出回应内文&初探AES CBC加密 - [C#]丰收款API必备前置作业(四)

【Day19】维持连线 ─ 工具实作篇(一)

哈罗~ 我们前几天提到, 可以利用网路监听、密码破解来取得使用权限, 今天我们要来介绍可以做远端控制...

【从零开始的 C 语言笔记】第九篇-scanf 介绍 & 结合printf的应用 (1)

不怎麽重要的前言 上一篇我们介绍了输出的函式printf,大家应该对於列印结果可以自由应用了吧? 接...

Day 13 : PHP - 当阵列中有两个重复的key值,该如何将它们的value全部印出?

如标题,这篇想和大家聊聊「重复key」的问题 因为当你用print_r去印出有重复key的阵列时,它...

[Day10] Tableau 轻松学 - Dimension 与 Measure

前言 Tableau 将所有的资料栏位分成 Dimension (维度) 与 Measure (度量...

#04 No-code 之旅 — Next.js 中的 Pre-render 与 Data Fetching

嗨大家!昨天跟大家分享了四种网页渲染方式,那今天来讲讲该怎麽用 Next.js 实作~ 在 Next...