
995。 K 连续位翻转的最小次数
难
给你一个二进制数组 nums 和一个整数 k。
k 位翻转是从 nums 中选择一个长度为 k 的子数组,同时将子数组中的每个 0 变为 1,将子数组中的每个 1 变为 0。
返回所需的k位翻转的最小次数,以使数组中不存在0。如果不可能,则返回-1.
子数组是数组的连续部分。
示例1:
ChatX翻译
最实用、可靠的社交类实时翻译工具。 支持全球主流的20+款社交软件的聊天应用,全球200+语言随意切换。 让您彻底告别复制粘贴的翻译模式,与世界各地高效连接!
57 查看详情
输入: nums = [0,1,0], k = 1输出: 2说明: 翻转 nums[0],然后翻转 nums[2]。
示例2:
输入: nums = [1,1,0], k = 2输出: -1说明: 无论我们如何翻转大小为 2 的子数组,都不能让数组变成 [1,1,1]。
示例3:
输入: nums = [0,0,0,1,0,1,1,0], k = 3输出: 3说明:
翻转 nums[0],nums[1],nums[2]: nums 变为 [1,1,1,1,0,1,1,0] 翻转 nums[4],nums[5],nums[6]: nums 变为 [1,1,1,1,1,0,0,0] 翻转 nums[5],nums[6],nums[7]: nums 变为 [1,1,1,1,1,1,1,1]
限制:
1 51
解决方案:
类解决方案{ /*** @param 整数[] $nums * @param 整数 $k * @return 整数*/ 函数 minKBitFlips($nums, $k) { $flipped = array_fill(0, count($nums), false); $validFlipsFromPastWindow = 0; $翻转计数 = 0; for ($i = 0; $i = $k) { if ($flipped[$i - $k]) { $validFlipsFromPastWindow--; } } if ($validFlipsFromPastWindow % 2 == $nums[$i]) { if ($i + $k > 计数($nums)) { 返回-1; } $validFlipsFromPastWindow++; $翻转[$i] = true; $flipCount++; } } 返回$flipCount; }}
联系链接
领英GitHub
以上就是。 K 连续位翻转的最小次数的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/529048.html
微信扫一扫
支付宝扫一扫