穆罕默德·S·安瓦尔 (Mohammad S. Anwar) 每周都会发出“每周挑战”,让我们所有人都有机会为每周两次的任务提出解决方案。我的解决方案首先用Python编写,然后转换为Perl。这对我们所有人来说都是练习编码的好方法。
挑战,我的解决方案
您将获得一个二进制字符串数组 @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
给你一个整数数组,@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中文网其他相关文章!