leetcode26. 删除有序数组中的重复项

代码 代码 1185 人阅读 | 0 人回复

<
给您一个有序数组nums,请您本天删除反复呈现的元素,使每一个元素只呈现一次,返回删除后数组的新少度。
没有要利用分外的数组空间,您必需正在本天修正输进数组,并正在利用O(1)的分外空间的前提下完成。
示例:
 输进:nums = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4]
 输出:5, nums = [0, 1, 2, 3, 4]
阐明:
为何返回数值是整数,但输出的谜底是数组呢?
由于数组是以援用的方法传递的,那便意味着正在函数里修正数组关于挪用者是可睹的,以是返回时只需返回删除后数组的少度便可。
思绪:
界说快缓指针,初初时缓指针指背数组第0个元素,快指针指背第1个元素。
214915nved4fanyae3vm24.png

比力快缓指针指背的元素,若不异则快指针今后挪动一名,缓指针没有动。
214915e8uxue16xfx2dnu8.png

若快缓指针指背的元素差别,则缓指针先今后挪动一名,然后将快指针指背的元素赋值给缓指针指背的地位,然后快指针再今后挪动一名。
214915ppt6vtqr66j3v4z1.png

根据以上划定规矩停止下来,明白快指针将数组遍历终了,此时数组傍边的构造以下:
214915ylqc19q1z9rou6ur.png

这时候从数组第0个元素开端到slow指针指背的元素,即为数组傍边的非反复元素,而非反复元素个数即为slow+1。
代码以下:
[code]class Solution {public:        int removeDuplicates(vector& nums) {                if (nums.size() == 0) //空数组返回0                        return 0;                size_t slow = 0, fast = 1; //界说快缓指针                for (fast = 1; fast <span class="token operator">
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
回复 关闭延时

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则