首頁 >後端開發 >Python教學 >零步、第一步

零步、第一步

Barbara Streisand
Barbara Streisand原創
2025-01-02 21:54:38805瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:PyTorch 中的 mul下一篇:PyTorch 中的 mul