思路就是用最后一个元素替代idx的值就行,
像 C++ 里的 vector.pop_back() 的复杂度是 o(1)的
如果直接 调用 erase ,复杂度是O(n)
C++ 代码
#include <iostream>
#include<vector>
using namespace std;
vector<int> vec;
void removeVec(vector<int>& v,int idx){
auto last = v.back();
v[idx] = last;
v.pop_back();
}
int main()
{
vec.push_back(1);
vec.push_back(3);
vec.push_back(7);
vec.push_back(8);
removeVec(vec,1);
for(auto x:vec){
cout<<x<<endl;
}
return 0;
}
输出 :
1
8
7
java 代码
import java.util.*;
public class Main
{
private static List<Integer> list = new ArrayList<>();
private static void removeList(List<Integer> list,int idx){
var last = list.get(list.size()-1);
list.set(idx,last);
list.remove(list.size()-1);
}
public static void main(String[] args) {
list.add(1);
list.add(3);
list.add(7);
list.add(8);
removeList(list,1);
for(var i:list){
System.out.println(i);
}
}
}
输出 :
1
8
7