1 #include "000库函数.h"
2
3 ////////////自解1:逐个筛选在赋值,时间最短36ms
4 class Solution {
5 public:
6 int removeDuplicates(vector<int>& nums) {
7 if (nums.size() < 2)return nums.size();
8 vector<int>v;
9 v.push_back(nums[0]);
10 for (int i = 1, j = 0; i < nums.size(); ++i)
11 if (nums[i] != nums[i - 1])
12 v.push_back(nums[i]);
13 nums = v;
14 return nums.size();
15 }
16 };
17
18 //////////////自解2:使用set自动去重48ms
19 class Solution {
20 public:
21 int removeDuplicates(vector<int>& nums) {
22 if (nums.size() < 2)return nums.size();
23 set<int>v;
24 v.insert(nums.begin(), nums.end());
25 nums.assign(v.begin(), v.end());
26 return nums.size();
27 }
28 };
29
30 //////////自解3 使用算法 60ms
31 class Solution {
32 public:
33 int removeDuplicates(vector<int>& nums) {
34 return std::unique(nums.begin(), nums.end()) - nums.begin();
35 }
36 };
37
38 ////////////博客解法1 56ms
39 class Solution {
40 public:
41 int removeDuplicates(vector<int>& nums) {
42 if (nums.empty()) return 0;
43 int pre = 0, cur = 0, n = nums.size();
44 while (cur < n) {
45 if (nums[pre] == nums[cur]) ++cur;
46 else nums[++pre] = nums[cur++];
47 }
48 return pre + 1;
49 }
50 };
51 //////////////////博客解法1 56ms
52 class Solution {
53 public:
54 int removeDuplicates(vector<int>& nums) {
55 if (nums.empty()) return 0;
56 int j = 0, n = nums.size();
57 for (int i = 0; i < n; ++i) {
58 if (nums[i] != nums[j]) nums[++j] = nums[i];
59 }
60 return j + 1;
61 }
62 };
63
64 void T026() {
65 vector<int>nums = { 0,0,1,1,1,2,2,3,3,4 };
66 Solution S;
67 cout << S.removeDuplicates(nums) << endl;
68 for (int i = 0; i < nums.size(); ++i)
69 cout << nums[i] << ' ';
70 cout << endl;
71 }