leetcodeのquestionについて、私はポストの一番下にあるコードでPython 2.7を解決しようとしました。しかし、入力が[2,1]
の場合、関数は永遠にループします。しかし、私がスワップを行う行を変更し、順序が逆になるように変数を切り替えると、スワップが実際に機能し、関数が正しく実行されます。スワップは片方向で、もう片方は動作しないのはなぜですか?
現在のところ、コードのスワップはnums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
で、これは動作しません(これはwhile
ループ内にあります)。スワップ順をnums[nums[i]-1], nums[i] = nums[i], nums[nums[i]-1]
に変更すると、スワップ/割り当てが機能します。何故ですか?私はSOを見て、Pythonのa,b=b,a
スワップは、a
とb
の両方をスタックに置いて(=
の右側を評価して)、(description here)に再割り当てするように見えます。それがうまくいくならば、なぜ同じ結果を達成しないのですか?b,a=a,b
?
Leetcodeのオンラインジャッジで、私の現在の(永遠に繰り返す)ページがフリーズします。私は自分のローカルのPython 2.7環境で試してみましたが、それも永遠にループします。私はa,b=b,a
が私の環境でb,a=a,b
と等価であることをテストしました。それでは、スワップが1つの順序であり、他の順序で完全に動作するとき、なぜ私のコードは永遠にループしますか?
def firstMissingPositive(nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(nums) == 1:
if nums[0] != 1:
return 1
else:
return 2
i = 0
while i < len(nums):
if nums[i] > 0 and nums[i] - 1 < len(nums) and nums[i] != nums[nums[i]-1]:
#Line below does not work
nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
#=>> ??But this works?? # nums[nums[i]-1], nums[i] = nums[i], nums[nums[i]-1]
else:
i += 1
for i, int in enumerate(nums):
if int != i + 1:
return i + 1
return len(nums) + 1
を....これはBIGありなしなし!!! –