首页 > 后端开发 > Python教程 > 零步、第一步

零步、第一步

Barbara Streisand
发布: 2025-01-02 21:54:38
原创
803 人浏览过

Step zero, step one

每周挑战302

穆罕默德·S·安瓦尔 (Mohammad S. Anwar) 每周都会发出“每周挑战”,让我们所有人都有机会为每周两次的任务提出解决方案。我的解决方案首先用Python编写,然后转换为Perl。这对我们所有人来说都是练习编码的好方法。

挑战,我的解决方案

任务 1:1 和 0

任务

您将获得一个二进制字符串数组 @str 和两个整数 $x 和 $y。

编写一个脚本返回 @str 的最大子集的大小,使得子集中最多有 $x 0 和 $y 1。

如果 m 的所有元素也是 n 的元素,则集合 m 是 n 的子集。

我的解决方案

我没有将变量 x 和 y 命名为 max_zeros 和 max_ones,因为这样更有意义。对于命令行,我将最后两个值作为 max_zeros 和 max_ones,其余值放入 s 数组中。

对于这个任务,我有一个可变长度,从 s 中的项目数开始减少到 1。对于每个长度,我然后使用 itertool 的组合函数来计算长度项的所有唯一组合,并将其存储在子集变量中。

对于每个子集,我将所有字符串连接在一起,计算 0 和 1 的数量,并查看它们是否分别小于或等于 max_zeros 和 max_ones。如果是,我返回长度变量。如果没有找到,我返回零。

def ones_and_zeros(s: list, max_zeros: int, max_ones: int) -> int:
    for length in range(len(s), 0, -1):
        for subset in combinations(s, length):
            bits = ''.join(subset)
            if bits.count('0') <= max_zeros and bits.count('1') <= max_ones:
                return length

    return 0
登录后复制

示例

$ ./ch-1.py 10 0001 111001 1 0 5 3
4

$ ./ch-1.py 10 0001 10 1 0 1 1
2
登录后复制

任务 2:循序渐进

任务

给你一个整数数组,@ints。

编写一个脚本来查找最小正起始值,使得逐步总和永远不会小于 1。

我的解决方案

实际上,正整数列表的“最小正起始值”是 0.000...01。然而,第二个例子似乎暗示这个数字实际上是一个整数。

对于此任务,我从两个变量开始,min_value 被设置为整数列表的第一个值,value 为零。然后,我迭代 ints 列表,并将该数字添加到 value 变量中。如果值小于 min_value,我会更新 min_value 变量。

如果 min_value 大于或等于 0,我返回 1。如果不是,我返回 1 - min_value。

def step_by_step(ints: list) -> int:
    min_value = ints[0]
    value = 0

    for i in ints:
        value += i
        if min_value > value:
            min_value = value

    if min_value >= 0:
        return 1

    return 1 - min_value
登录后复制

示例

$ ./ch-1.py 10 0001 111001 1 0 5 3
4

$ ./ch-1.py 10 0001 10 1 0 1 1
2

$ ./ch-2.py -3 2 -3 4 2
5

$ ./ch-2.py 1 2
1

$ ./ch-2.py 1 -2 -3
5
登录后复制

以上是零步、第一步的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板