Re: [闲聊] 每日leetcode

楼主: JIWP (JIWP)   2024-06-24 18:04:33
995. Minimum Number of K Consecutive Bit Flips
给一个binary array nums
可以选择长度k的subarray,将里面的元素反转
请问最少要翻转几次,才能让整个array的元素都是1
如果不行就回传-1
思路:
这题概念应该满简单的
假设nums[i]==0就将i~i+k-1的元素全部反转
一直这样重复下去就可以得到答案了
而当nums[i]==0且i+k>n的时候就没办法把整个nums都变成1了
不过暴力解会超出时间
所以要想个办法纪录,当前元素的反转情况
用flipcnt纪录反转次数
再建立一个diff矩阵
因为你每次反转只能反转k个元素
所以当你反转的时候,要将diff[i+k]++,纪录i+k以后的元素跟flipcnt相差几次反转
每次就判断(nums[i]+flipcnt)&1==0
golang code :
func minKBitFlips(nums []int, k int) int {
n, res, flipcnt := len(nums), 0,0
diff := make([]int, n+1)
for i := 0; i < n; i++ {
flipcnt-=diff[i]
if (nums[i]+flipcnt)&1 == 0 {
if i+k>n{
return -1
}
res++
flipcnt++
diff[i+k]++
}
}
return res
}
作者: oin1104 (是oin的说)   2024-06-24 18:05:00
大师 送我模型
楼主: JIWP (JIWP)   2024-06-24 18:08:00
我偷看答案的我不是大师 不用送你模型
作者: SecondRun (雨夜琴声)   2024-06-24 18:22:00
大师 送我秘书

Links booklink

Contact Us: admin [ a t ] ucptt.com