LeetCode 26. 删除排序数组中的重复项
原题链接
简单
作者:
bruce
,
2021-01-24 20:50:51
,
所有人可见
,
阅读 254
#include <iostream>
#include <vector>
using namespace std;
/**
* 26, 去掉数组中重复的数字,返回的是非重复数组的长度;
*/
/**
* 方法 1,回家等通知算法;
*/
int removeDuplicates1(vector<int> &nums)
{
int m = unique(nums.begin(), nums.end()) - nums.begin();
nums.resize(m);
return m;
}
/**
* 方法 2,数组是排好序的,使用原地算法,如果这个数和前面不一样,就保存这个数
* 使用双指针
*/
int removeDuplicates2(vector<int> &res)
{
if (res.empty())
return 0;
int n = res.size(), i = 0;
for (int j = 0; j < n; j++)
{
if (res[i] != res[j])
res[++i] = res[j];
}
return i + 1;
}
/**
* 方法 3,k保证在一个数内是没有重复的,如果k和上一个数不等,那么肯定没有重复元素
* 这里只要改一下k,其实就是第80题目的解
*/
int removeDuplicates3(vector<int> &res)
{
int n = res.size(), k = 0;
for (auto x: res)
{
if (k<1 || x != res[k - 1])
res[k++] = x;
}
return k;
}