Я столкнулся с этой проблемой, когда хочу попробовать версию python: https://leetcode.com/problems/first-missing-positive/discuss/17071/My-short-C++-solution-O(1)-space и-О (п) -time
Я не уверен, почему a[0], a[a[0]] = a[a[0]], a[0]
это не делает обмен?
>>> nums
[2, 1, 0]
>>> a = [2,1,0]
>>> a[0], a[a[0]] = a[a[0]], a[0]
>>> a
[2, 1, 0]
>>> a[0]
2
>>> a[0],a[2] = a[2], a[0]
>>> a
[0, 1, 2]
Я предполагаю, что реализация синтаксиса a, b = b - это что-то вроде:
tmp = a[0] (tmp = 2)
a[0] = a[a[0]] (a[0] = a[2] = 0)
a[a[0]] = tmp (a[a[0]] = a[0] = tmp = 2)
Затем я проверил реализацию функции swap в C++. Я ничего не знаю о C++, но похоже, что идея такая же: http://www.cplusplus.com/reference/algorithm/swap/
The behavior of these function templates is equivalent to:
template <class T> void swap (T& a, T& b)
{
T c(std::move(a)); a=std::move(b); b=std::move(c);
}
template <class T, size_t N> void swap (T (&a)[N], T (&b)[N])
{
for (size_t i = 0; i<N; ++i) swap (a[i],b[i]);
}
мы имеем c = a, тогда a = b и b = a Итак, почему функция C++ swap не имеет этой проблемы? И как написать такую функцию подкачки в питоническом режиме?