このソリューションが無限ループに陥らないのはなぜですか?

フォックスホール

HackerRank(https://www.hackerrank.com/challenges/minimum-swaps-2/problem)でMinimum Swaps2アレイの課題を解決しました私のソリューションはより大きな配列でタイムアウトするので、コードのリファクタリングに戻りました。私は新しい解決策に出くわしましたが、提出するとすぐに機能しないことに気づきました。しかし、それは完璧でした。しかし、私はその理由を理解しようとして怒っています。少なくとも、2つの配列値を繰り返しスワップする無限のwhileループに陥らないのはなぜですか?明白なことはさておき、それ魔法のようにループから抜け出したましょう最小値を探している場合、スワップをカウントするために使用している条件下で、どのようにして正しい答えを得ることができるでしょうか。スワップの数?コードのさまざまなポイントにprintステートメントを追加して、何が起こっているのかを確認し、自分で理解しようとしましたが、混乱を招くだけです。誰かが私の無意味な天才の論理を私に教えてもらえますか?それともこれはまぐれですか?

#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the minimumSwaps function below.
def minimumSwaps(arr):
    swaps = 0

    for x in range(0, n - 1):
        while arr[x] != x + 1:
            arr[arr[x] - 1], arr[x] = arr[x], arr[arr[x] - 1]
            swaps += 1

    return swaps


if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    n = int(input())

    arr = list(map(int, input().rstrip().split()))

    res = minimumSwaps(arr)

    fptr.write(str(res) + '\n')

    fptr.close()
オレンジ氏

whileの条件は、現在の要素が正しい位置にあるかどうかを確認します。
while arr[x] != x + 1:

ループ内の各反復で、x位置の値を正しい位置であるarr [x] -1に移動します。したがって、while内のすべての反復は、1つの要素の位置を修正します。以下の例を参照してください。

>>> i = 0
>>> a
[9, 1, 3, 10, 8, 5, 6, 2, 7, 4]
>>> #first iteration
>>> a[a[i]-1], a[i] = a[i], a[a[i] - 1]
>>> a
[7, 1, 3, 10, 8, 5, 6, 2, 9, 4]
>>> #second iteration
>>> a[a[i]-1], a[i] = a[i], a[a[i] - 1]
>>> a
[6, 1, 3, 10, 8, 5, 7, 2, 9, 4]

最初の反復は9を配列の9番目の位置(インデックス8)に移動し、最初の位置は7になります。2番目の反復は7を配列の7番目の位置(インデックス6)に移動し、最初の位置は6になります。

私はこれが十分に明確であることを願っています:)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

なぜこれが無限ループに陥らないのですか?

分類Dev

リーダーが無限ループに陥っているのはなぜですか

分類Dev

なぜbreaking-retain-cycleはこのように無限ループに陥らないのでしょうか?

分類Dev

なぜこれが無限ループに陥るのですか?

分類Dev

このコードが無限ループに陥るのはなぜですか?

分類Dev

このbashプログラムが無限ループに陥るのはなぜですか?

分類Dev

このソリューションでforループを使用できないのはなぜですか?

分類Dev

このPythonソリューションがインプレースソリューションではないのはなぜですか?

分類Dev

「セマフォの更新」でソナーランナー分析が無限ループに陥るのはなぜですか

分類Dev

このソリューションで画面が小さい場合にジャンボトロンの高さが減らないのはなぜですか?

分類Dev

高速列挙のオプションが無限ループを引き起こすのはなぜですか?

分類Dev

ajaxヘルパーを使用しているときに、これがアクションの無限ループを作成するのはなぜですか?

分類Dev

SOFから取得したこのソリューションが有効にならないのはなぜですか?

分類Dev

SOFから取得したこのソリューションが有効にならないのはなぜですか?

分類Dev

最大32ビットに制限されていますが、コードがソリューションをこの最大値を超えてプルできないのはなぜですか?

分類Dev

このアセンブリコードが無限ループになるのはなぜですか?

分類Dev

この無限のループがシステムリソースを使い果たしないのはなぜですか?

分類Dev

keras LSTMモデルが無限ループに陥るのはなぜですか?

分類Dev

拡張メソッドだけでない限り、Swiftプロトコルのミューテーションメソッドが無限に繰り返されるのはなぜですか?

分類Dev

なぜこのプロローグルールは無限ループに入らないのですか?

分類Dev

Azure ADの「リクエストAPI権限」で「アプリケーション権限」が無効になっているのはなぜですか?

分類Dev

この再帰的ソリューションが機能しないのはなぜですか?

分類Dev

警告が表示されるのはなぜですか?最新バージョンではこれらの権限が必要ないのに、このアプリはGoogle Playの権限ポリシーを満たしていませんか?

分類Dev

Python、なぜi = + 1が無限ループにならないのですか?

分類Dev

このスクリプトが無限ループで終了しないのはなぜですか?

分類Dev

aptが、ソースからすでにいくつかのアプリケーションがインストールされていることを知らないのはなぜですか?

分類Dev

自分自身を(再帰的に)呼び出すメンバーメソッドが無限ループに入らないのはなぜですか?

分類Dev

アプリケーションにAndroidManifest権限が設定されていないのはなぜですか

分類Dev

アプリケーションにAndroidManifest権限が設定されていないのはなぜですか

Related 関連記事

  1. 1

    なぜこれが無限ループに陥らないのですか?

  2. 2

    リーダーが無限ループに陥っているのはなぜですか

  3. 3

    なぜbreaking-retain-cycleはこのように無限ループに陥らないのでしょうか?

  4. 4

    なぜこれが無限ループに陥るのですか?

  5. 5

    このコードが無限ループに陥るのはなぜですか?

  6. 6

    このbashプログラムが無限ループに陥るのはなぜですか?

  7. 7

    このソリューションでforループを使用できないのはなぜですか?

  8. 8

    このPythonソリューションがインプレースソリューションではないのはなぜですか?

  9. 9

    「セマフォの更新」でソナーランナー分析が無限ループに陥るのはなぜですか

  10. 10

    このソリューションで画面が小さい場合にジャンボトロンの高さが減らないのはなぜですか?

  11. 11

    高速列挙のオプションが無限ループを引き起こすのはなぜですか?

  12. 12

    ajaxヘルパーを使用しているときに、これがアクションの無限ループを作成するのはなぜですか?

  13. 13

    SOFから取得したこのソリューションが有効にならないのはなぜですか?

  14. 14

    SOFから取得したこのソリューションが有効にならないのはなぜですか?

  15. 15

    最大32ビットに制限されていますが、コードがソリューションをこの最大値を超えてプルできないのはなぜですか?

  16. 16

    このアセンブリコードが無限ループになるのはなぜですか?

  17. 17

    この無限のループがシステムリソースを使い果たしないのはなぜですか?

  18. 18

    keras LSTMモデルが無限ループに陥るのはなぜですか?

  19. 19

    拡張メソッドだけでない限り、Swiftプロトコルのミューテーションメソッドが無限に繰り返されるのはなぜですか?

  20. 20

    なぜこのプロローグルールは無限ループに入らないのですか?

  21. 21

    Azure ADの「リクエストAPI権限」で「アプリケーション権限」が無効になっているのはなぜですか?

  22. 22

    この再帰的ソリューションが機能しないのはなぜですか?

  23. 23

    警告が表示されるのはなぜですか?最新バージョンではこれらの権限が必要ないのに、このアプリはGoogle Playの権限ポリシーを満たしていませんか?

  24. 24

    Python、なぜi = + 1が無限ループにならないのですか?

  25. 25

    このスクリプトが無限ループで終了しないのはなぜですか?

  26. 26

    aptが、ソースからすでにいくつかのアプリケーションがインストールされていることを知らないのはなぜですか?

  27. 27

    自分自身を(再帰的に)呼び出すメンバーメソッドが無限ループに入らないのはなぜですか?

  28. 28

    アプリケーションにAndroidManifest権限が設定されていないのはなぜですか

  29. 29

    アプリケーションにAndroidManifest権限が設定されていないのはなぜですか

ホットタグ

アーカイブ