【アルゴリズム】アルゴリズム質問-20231205

1.LCS 01.プラグインのダウンロード

シンプル
Xiaokou は、VS コード用のプラグインをインストールして使用する予定です。初期状態では、1 分あたり 1 つのプラグインのダウンロードを完了できる帯域幅があります。次の 2 つの戦略のいずれかが 1 分ごとに選択されるとします。
現在の帯域幅を使用してプラグインをダウンロードする
帯域幅を 2 ​​倍にする (したがって、ダウンロードされる数も 2 倍になります)プラグイン)< a i=4> n 個のプラグインをダウンロードするのにかかる最小時間分の間、Xiaokou に戻ってください。 注: ダウンロードされたプラグインの実際の数は n を超える場合があります

例 1:
入力: n = 2
出力: 2
説明: 次の 2 つの解決策。 2 分以内に 2 つのプラグインをダウンロードできる
オプション 1: 最初の 1 分間で帯域幅が 2 倍になり、1 分あたり 2 つのプラグインをダウンロードできる帯域幅になり、2 番目の分で 2 つのプラグインをダウンロードできます
オプション 2: 最初の 1 分で 1 つのプラグインをダウンロードし、2 番目の分で 1 つのプラグインをダウンロードします

例 2:
入力: n = 4
出力: 3
説明: 少なくとも 3 が必要です4 つのプラグインのダウンロードを完了するには、次の解決策の 1 つが考えられます。最初の 1 分間で帯域幅が 2 倍になり、1 分あたり 2 つのプラグインをダウンロードできる帯域幅になります。 2 分目、3 分目に 2 つのプラグインがダウンロードされます。

問題解決のアイデア
ロジックは次のようになります。ダウンロードに 2 分かかる場合、ダウンロードが完了するまでに 2 分 + 1 分かかることは間違いありません。ダウンロードに4分かかるとすると、2倍+ダウンロード1分で確実に2倍になります。したがって、2 倍にすることが常に最適解になります。つまり、 2 倍になります。

class Solution:
    def leastMinutes(self, n: int) -> int:
        time_count = 0
        width = 1
        while n > width:
            width = width * 2
            time_count = time_count + 1
        time_count = time_count + 1
        return time_count

2. 数値のリストが与えられた場合、リスト内のすべての 0 を右に移動してください。

数値のリストが与えられた場合、リスト内のすべての 0 を右に移動します。
たとえば、move_zeros([1, 0, 1, 2, 0, 1, 3]) の場合、期待される戻り結果は次のとおりです: [1, 1, 2, 1, 3, 0, 0]

def test(nums):
    fast = 0
    slow = 0
    while fast < len(nums):
        if nums[fast]:
            nums[slow], nums[fast] = nums[fast], nums[slow]
            slow += 1
        fast += 1
    return nums


nums = [1, 0, 1, 2, 0, 1, 3]
print(test(nums))

3. 文字列の先頭と末尾のスペースを削除するには、trim() 関数を実装します (strip() メソッドは使用できません)。

タイトル: 文字列の先頭と末尾のスペースを削除する Trim() 関数を実装します (strip() メソッドは使用できません)
例:
1. 文字列が空の場合は、trim(' ') を入力します。期待される戻り結果は ''
です。 2. 文字列の先頭と末尾のスペースの数が1 より大きい場合は、trim(' a bc ') と入力してください。期待される戻り結果は 'a bc'です。

def trim(super):
    a = 0
    b = 0
    for i in range(len(super)):
        if super[i] == ' ':
            a += 1
        else:
            break
    for i in range(len(super)):
        if super[-(i + 1)] == ' ':
            b += 1
        else:
            break
    print(super[a:-b])


trim('        23 2    1231  123  ')

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/YZL40514131/article/details/134720400