。 K 连续位翻转的最小次数

WBOY
发布: 2024-07-10 14:19:41
转载
974人浏览过

。 k 连续位翻转的最小次数

995。 K 连续位翻转的最小次数

给你一个二进制数组 nums 和一个整数 k。

k 位翻转是从 nums 中选择一个长度为 k 的子数组,同时将子数组中的每个 0 变为 1,将子数组中的每个 1 变为 0。

返回所需的k位翻转的最小次数,以使数组中不存在0。如果不可能,则返回-1.

子数组是数组的连续部分。

示例1:

  • 输入: 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 5
  • 1

解决方案:

类解决方案{

    /*** @param 整数[] $nums
     * @param 整数 $k
     * @return 整数*/
    函数 minKBitFlips($nums, $k) {
        $flipped = array_fill(0, count($nums), false);
        $validFlipsFromPastWindow = 0;
        $翻转计数 = 0;

        for ($i = 0; $i < 计数($nums); $i++) {
            如果 ($i >= $k) {
                if ($flipped[$i - $k]) {
                    $validFlipsFromPastWindow--;
                }
            }
            if ($validFlipsFromPastWindow % 2 == $nums[$i]) {
                if ($i + $k > 计数($nums)) {
                    返回-1;
                }
                $validFlipsFromPastWindow++;
                $翻转[$i] = true;
                $flipCount++;
            }
        }

        返回$flipCount;
    }
}
登录后复制

联系链接

  • 领英
  • GitHub

以上就是。 K 连续位翻转的最小次数的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
git
来源:dev.to网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号