Rust 공식 문서에 따르면, Vec의 i 번째 원소 하나를 제거하는 remove 동작의 Time Complexity는 O(n-i)입니다.
그런데 swap_remove는 Vec 내 순서를 보존하지 않는 대신 O(1)로 동작한다고 합니다.
이게 가능한 이유는 아래와 같습니다.
먼저 원소끼리 순서를 바꾸는 동작은 O(1)입니다.
그다음 삭제할 원소를 Vec의 맨 끝으로 보낸 뒤 remove 하면 O(n-i) = O(n-(n-1)) = O(1)입니다.
문제들 중에 삭제할 원소를 맨 끝으로 보내는 문제들이 있었는데, 이렇게 실제 사용하는 알고리즘이었던 것 같습니다.
다만 개인적으로 remove를 수행하는 경우는 sort가 필요한 경우가 많아서, 당장 swap_remove로 remove를 전부 대체하지는 않을 것 않습니다.