题目

Given a sorted array, remove the duplicates in place such that each element appear only once
and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
For example, Given input array A = [1,1,2],
Your function should return length = 2, and A is now [1,2].

解法1:常规解法

/*
Given a sorted array, remove the duplicates in place such that each element appear only once
and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
For example, Given input array A = [1,1,2],
Your function should return length = 2, and A is now [1,2].
*/// 时间复杂度n,空间复杂度1
#include<iostream>
using namespace std;
#include<vector>
class Solution{public:int removeDuplicates(vector<int>& nums){if(nums.empty()) return 0;int index=0;for(int i=0;i<nums.size();i++){// 先自己和自己比较// 建议画图if(nums[index]!=nums[i]){// index是用来更新数组的// 只要发现后面的某个元素和当前指向的元素值不一样// 就会去更新数组index+=1; nums[index]=nums[i];}}return index+1;}
};
int main(){Solution s;vector<int> array={1,2,2,3,3};int result=s.removeDuplicates(array);cout<<result;return 0;
}

解法2:STL懒人解法

//使用stl
// 时间复杂度是n,空间复杂度是1
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution{public:int removeDuplicates(vector<int>& nums){//          printf("%d %d",*nums.begin(),*nums.end());return distance(nums.begin(),unique(nums.begin(),nums.end()));/*begin()函数返回一个指向当前vector起始元素的迭代器.end() 函数返回一个指向当前vector末尾元素的下一位置的迭代器.注意,如果你要访问末尾元素,需要先将此迭代器自减1.可以用其进行一些迭代操作,比如:for (auto it = begin(myvector); it != end(myvector); ++it)cout << *it << ' ';unique()函数删除链表中所有重复的元素。如果指定pr,则使用pr来判定是否删除。distance() 函数用于计算两个迭代器表示的范围内包含元素的个数这段代码的意义就是,计算出没有重复元素数组的长度*/}
};
int main(){Solution s;vector<int> array={1,2,2,3,3};int result=s.removeDuplicates(array);cout<<result;return 0;
}

解法3:STL 勤快人模板解法

这就是解法1和解法2的综合

//使用stl
// 时间复杂度是n,空间复杂度是1
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution{public:int removeDuplicates(vector<int>& nums){return distance(nums.begin(),removeDuplicates(nums.begin(),nums.end(),nums.begin()));}template<typename InIt,typename OutIt>
//      template<class InIt,class OutIt>
/*  其中template和class是关键字,class可以用typename 关键字代替,在这里typename 和class没区别,
<>括号中的参数叫模板形参,模板形参和函数形参很相像,模板形参不能为空。*/OutIt removeDuplicates(InIt first,InIt last,OutIt output){while(first!=last){*output++=*first;first=upper_bound(first,last,*first);//upper_bound() 函数定义在<algorithm>头文件中,用于在指定范围内查找大于目标值的第一个元素。//查找[first, last)区域中第一个大于 val 的元素。// 这个方法和第一个方法类似}return output;}
};
int main(){Solution s;vector<int> array={1,2,2,3,3};int result=s.removeDuplicates(array);cout<<result;return 0;
}

LeetCode刷题:删除有序数组的重复项详解相关推荐

  1. LeetCode刷题笔记2——数组2

    LeetCode刷题笔记2--数组2 重塑数组 题目 在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原 ...

  2. python去重复排序_Python实现删除排序数组中重复项的两种方法示例

    本文实例讲述了Python实现删除排序数组中重复项的两种方法.分享给大家供大家参考,具体如下: 对于给定的有序数组nums,移除数组中存在的重复数字,确保每个数字只出现一次并返回新数组的长度 注意:不 ...

  3. LeetCode刷题(十)----数组-----medium部分(Java、C++)

    LeetCode刷题(十)-----数组-------medium部分(Java.C++) 238. 除自身以外数组的乘积 给定长度为n的整数数组nums,其中n>1,返回输出数组output, ...

  4. leetcode第26题:删除排序数组的重复项

    给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 给定数组 ...

  5. 为了更快的砍柴,每日磨刀:LeetCode刷题总结(数组篇)

    看完<资深技术Leader曹乐:如何成为技术大牛>这篇文章后,我把提升代码能力,放到了一个优先级比较高的位置.为什么是刷LeetCode而不是看开源代码?可能有几个方便的原因: 1 面试笔 ...

  6. LeetCode简单题之有序数组中出现次数超过25%的元素

    题目 给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%. 请你找到并返回这个整数 示例: 输入:arr = [1,2,2,6,6,6,6,7,10 ...

  7. C#LeetCode刷题-树状数组

    树状数组篇 # 题名 刷题 通过率 难度 218 天际线问题 32.7% 困难 307 区域和检索 - 数组可修改 42.3% 中等 315 计算右侧小于当前元素的个数 31.9% 困难 493 翻转 ...

  8. 【leetcode刷题】 64.数组的度——Java版

    ⭐欢迎订阅<leetcode>专栏,每日一题,每天进步⭐ 看明白了就不难,总结一下就是要找出数组的众数,并且还有找出众数在数组中第一次出现和最后一次出现的位置,两个位置组成区间长度就是答案 ...

  9. 删除排序数组的重复项(两种解法思路分享)

    删除排序数组中的重复项 题目描述: 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使 ...

最新文章

  1. 网球hcc http catcher使用方法以及规则分享
  2. NDK,动态链接库,JNI
  3. DataTables选择多行
  4. MyBatis使用动态代理报 invalid bound statement (not found) 错
  5. C语言学习之1到10的奇数相乘1到10的偶数相乘
  6. Magento 产品推荐 extension Featured products 2.0 – revamped!
  7. iPhone 13全系价格曝光:顶配售价将达新高
  8. “总有一天你会知道,因工作和别人翻脸有多蠢。”这句话有没有道理?
  9. 机器学习监督学习之分类算法---朴素贝叶斯代码实践
  10. windows进程间通信
  11. Spring Cloud Bus消息总线(学习总结)
  12. 软件测试与质量保证习题
  13. Flips测试类(page43)
  14. vue+elementUI中Dialog实现组件弹框以及子父组件页面传值
  15. 唯冠为何赢了苹果却不付律师费
  16. (附源码)springboot音乐播放小程序 毕业设计 031306
  17. Apostrophe not preceded错误
  18. 代码审计工具简单汇总
  19. MATLAB信号处理---学习小案例(10)---Z反变换
  20. 【一致性仿真】Consensus Control of Leader-Following Multi-Agent Systems in Directed Topology With ...

热门文章

  1. 基于wemos的火焰报警和阿里云远程控制板载灯
  2. PAT | 1011 A+B 和 C(分数 15)
  3. C语言--字符串排序
  4. Linux:centos7防火墙开放端口操作
  5. 三国大将周瑜并非气量狭小乃真英雄
  6. Esper学习之三:进程模型 .
  7. Rex's BaseActivity
  8. 高仿qq‘一键下班’—让你的view‘黏’起来
  9. CNN(卷积神经网络)详解
  10. 【小白经验】“写小论文paper”总结