問題の原因となる配列内の要素を交換する

強スーパー

明けましておめでとうございます。Python環境で配列内の要素を交換することについて質問があります。問題のないコードは次のとおりです。

def findMissingNumber(nums):
    length = len(nums)
    result = []
    i = 0
    while i < length:
        # num = nums[i]
        target = nums[i] - 1
        if nums[i] != i+1 and nums[i] != nums[target]:
            # swap with the nums[i]-1
            nums[target], nums[i]= nums[i], nums[target]
        else:
            i += 1
    for j in range(length):
        if nums[j] != j+1:
            result.append(j+1)
    return result

print(findMissingNumber([2, 3, 1, 8, 2, 3, 5, 1]))
print(findMissingNumber([2, 4, 1, 2]))
print(findMissingNumber([2, 3, 2, 1]))

答えあり:

[4, 6, 7]
[3]
[4]

間違っているのは:

def findMissingNumber(nums):
    length = len(nums)
    result = []
    i = 0
    while i < length:
        num = nums[i]
        target = num - 1
        if num != i+1 and num != nums[target]:
            # swap with the num-1
            nums[target], num = num, nums[target]
        else:
            i += 1
    for j in range(length):
        if nums[j] != j+1:
            result.append(j+1)
    return result

print(findMissingNumber([2, 3, 1, 8, 2, 3, 5, 1]))
print(findMissingNumber([2, 4, 1, 2]))
print(findMissingNumber([2, 3, 2, 1]))

答えあり:

[4, 6, 7]
[3, 4]
[3, 4]

なぜ参照(それと呼ぶべきか)が問題を引き起こしているのかわかりません。詳しく説明していただけませんか。
ありがとう。

ガウリシャンカルバドラ

コメント付きのコードを修正しました。

def findMissingNumber(nums):
    length = len(nums)
    result = []
    i = 0
    while i < length:
        # num and nums[i] have the same value but doesnt refer to same memory location
        num = nums[i]
        target = num - 1
        if num != i+1 and num != nums[target]:
            # swap with the num-1
            
            # incorrect swap, num value is not referencing the list index, but has a copy of its value,
            # so instead of swapping value with num, do it from the list like below
            # nums[target], num = num, nums[target]
            
            
            # correct swap
            nums[target], nums[i] = nums[i], nums[target]
        else:
            i += 1
    for j in range(length):
        if nums[j] != j+1:
            result.append(j+1)
    return result

print(findMissingNumber([2, 3, 1, 8, 2, 3, 5, 1]))
print(findMissingNumber([2, 4, 1, 2]))
print(findMissingNumber([2, 3, 2, 1]))

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

問題の原因となるJavaScript配列から要素を削除する

分類Dev

2つの配列の値を交換するときの説明できない問題

分類Dev

numpy配列のコピー内の要素を交換する

分類Dev

確率pで配列内の要素を交換する方法は?

分類Dev

Python リスト内の 2 つの要素を交換するときに問題が発生する

分類Dev

配列内の要素をスキップする原因となる選択ソートコードに問題はありますか?

分類Dev

配列内の要素をランダムに交換すると、配列がスタック上にあるときに要素がゼロになります

分類Dev

配列要素の半分を別の配列の半分と交換する

分類Dev

配列内の要素を交換するときに間違った出力を取得する

分類Dev

オブジェクトの配列内の要素を交換する

分類Dev

セル配列内の2つの要素を交換する慣用的な方法はありますか?

分類Dev

弦を交換する際の問題

分類Dev

2D配列の2つの要素を交換する

分類Dev

配列内の隣接する数値を交換する

分類Dev

3つ以上の配列間で要素を交換する

分類Dev

3つ以上の配列間で要素を交換する

分類Dev

JUnitを使用して配列内の2つの要素を交換する方法をテストする方法

分類Dev

Cで(異なる長さの文字列への)ポインタの配列内の2つの要素を交換する

分類Dev

配列内のペアを再帰的に交換する

分類Dev

C配列のソートにおける最後の要素の交換の問題

分類Dev

配列内の要素を交換するためのサンプルRubyプログラムのエラー

分類Dev

要素によるインデックス作成中に2つの配列要素を交換する奇妙な動作

分類Dev

ポインタc ++を使用して構造体の配列内の要素を交換する

分類Dev

Fortranで、要素ごとの行列の行交換が配列ごとの行交換よりも効率的であるのはなぜですか?

分類Dev

Ruby-ループ内で配列要素を連結する際の問題

分類Dev

Pythonの派手な配列で2行を交換する

分類Dev

派手な配列の次元を交換する

分類Dev

FortranとCの間で配列を交換する

分類Dev

配列要素と変数を効果的に交換するには?

Related 関連記事

  1. 1

    問題の原因となるJavaScript配列から要素を削除する

  2. 2

    2つの配列の値を交換するときの説明できない問題

  3. 3

    numpy配列のコピー内の要素を交換する

  4. 4

    確率pで配列内の要素を交換する方法は?

  5. 5

    Python リスト内の 2 つの要素を交換するときに問題が発生する

  6. 6

    配列内の要素をスキップする原因となる選択ソートコードに問題はありますか?

  7. 7

    配列内の要素をランダムに交換すると、配列がスタック上にあるときに要素がゼロになります

  8. 8

    配列要素の半分を別の配列の半分と交換する

  9. 9

    配列内の要素を交換するときに間違った出力を取得する

  10. 10

    オブジェクトの配列内の要素を交換する

  11. 11

    セル配列内の2つの要素を交換する慣用的な方法はありますか?

  12. 12

    弦を交換する際の問題

  13. 13

    2D配列の2つの要素を交換する

  14. 14

    配列内の隣接する数値を交換する

  15. 15

    3つ以上の配列間で要素を交換する

  16. 16

    3つ以上の配列間で要素を交換する

  17. 17

    JUnitを使用して配列内の2つの要素を交換する方法をテストする方法

  18. 18

    Cで(異なる長さの文字列への)ポインタの配列内の2つの要素を交換する

  19. 19

    配列内のペアを再帰的に交換する

  20. 20

    C配列のソートにおける最後の要素の交換の問題

  21. 21

    配列内の要素を交換するためのサンプルRubyプログラムのエラー

  22. 22

    要素によるインデックス作成中に2つの配列要素を交換する奇妙な動作

  23. 23

    ポインタc ++を使用して構造体の配列内の要素を交換する

  24. 24

    Fortranで、要素ごとの行列の行交換が配列ごとの行交換よりも効率的であるのはなぜですか?

  25. 25

    Ruby-ループ内で配列要素を連結する際の問題

  26. 26

    Pythonの派手な配列で2行を交換する

  27. 27

    派手な配列の次元を交換する

  28. 28

    FortranとCの間で配列を交換する

  29. 29

    配列要素と変数を効果的に交換するには?

ホットタグ

アーカイブ