026删除排序数组中的重复项

本文探讨了在C++中去除向量中重复元素的五种不同算法实现,包括逐个筛选、使用set自动去重、利用STL算法、以及两种博客解法。每种方法都附有代码示例,展示了不同的效率和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 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] << '\t';
70     cout << endl;
71 }

 

转载于:https://www.cnblogs.com/zzw1024/p/10530488.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值