有序向量去重,最坏时间复杂度O(n)

对于重复的元素,只保留第一个,其余的直接忽略

避免大量移动元素的操作

#include <vector>

template <typename T>
void uni(vector<T> &vec)
{
	int i=0, j=0, size=vec.size();
	//i记录已去重的最大元素位置
	//j记录当前扫描到的元素位置
	while(++j < size) //每次循环j都自增1
		if(vec[i] != vec[j]) //若i、j指向的元素不等
			vec[++i] = vec[j]; //先把i自增1,再把j指向的元素复制到i位置
	while(--j > i)
		vec.pop_back();
}
posted @ 2022-04-19 18:17  enbug  阅读(32)  评论(0)    收藏  举报