leetcode 26.删除排序数组中的重复项

题目的暴力解法很简单,遍历过程中记录哪一段是重复的,然后将那一段同值元素替换为只有一个元素即可。这个暴力解法的时间复杂度是O(n^2)的。

我按照自己的思路自己实现了代码如下(通过比较相邻元素)

复制代码
 1 class Solution {
 2 public:
 3     int removeDuplicates(vector<int> &nums) {
 4         if (nums.size() < 2) return nums.size();
 5         int len = nums.size();
 6         int j = 0;
 7         for (int i = 0; i < len-1; i++) {
 8             if (nums[i] != nums[i + 1]) {
 9                     nums[j++]=nums[i];
10                     }
11                 }
12         nums[j++]=nums[len-1];
13         return j;
14     }
15 };
复制代码

里面有三点细节需要考虑到的。

第一点,因为基于比较来移动指针。所以对于只含有一个元素或者没有元素的情况是首先要考虑的。

第二点,如果所有元素同值,那么指针也是没法移动的,也需要考虑。

第三点,对于每个元素和下一个元素这种比较方法,最后一个值的元素在for循环中没有识别,需要在循环后再次判断。

 

更好的解法被称作双指针法。这里的“指针”并非c语言上的指针。参考代码如下

复制代码
 1 class Solution {
 2 public:
 3 int removeDuplicates(vector<int>& nums) {
 4     if (nums.size() < 2) return nums.size();
 5     int j = 0;
 6     for (int i = 1; i < nums.size(); i++)
 7         if (nums[j] != nums[i]) nums[++j] = nums[i];
 8     return ++j;
 9 }
10 };
复制代码

 

posted @   布羽  阅读(69)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示