博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode_26_删除排序数组中的重复项
阅读量:3951 次
发布时间:2019-05-24

本文共 717 字,大约阅读时间需要 2 分钟。

文章目录

题目

给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

在这里插入图片描述

思路:双指针

分析:

拿到题首先分析一下,这是一个已经排好序数组,需要删除数组中重复的元素,而且是就地删除,通过下面的题干知道,所谓的删除并不是将重复的元素如下:

在这里插入图片描述

不需要考虑数组中新长度后面的元素,就是说新的数组并不需要删除重复的元素,只需要把前面重复的元素覆盖掉,然后返回新数组的大小,程序就会根据返回的数组大小去数组的前n个位置取元素。

使用双指针,a指针始终指向当前新数组的最后一个元素,使用b指针遍历数组,一旦发现nums[b]>nums[a]就代表着找到下一个元素,此时将nums[b]复制给nums[++a],如此循环至数组完毕!

程序:

int removeDuplicates(int* nums, int numsSize){
unsigned int a,b; if( numsSize<2 ){
//判断,如果小于两个元素,直接返回,没有重复 return numsSize; } /* 开始遍历 */ for( a=0,b=0; b
nums[a] ){
//发现新元素 a++; nums[a] = nums[b]; } } a++;//数组下标包含了0,所以返回的时候+1,就是数组元素的个数。 return a;}

运行结果:

在这里插入图片描述

转载地址:http://ovwzi.baihongyu.com/

你可能感兴趣的文章
1024 科学计数法 (20 分)
查看>>
1025 反转链表 (25 分)
查看>>
1026 程序运行时间 (15 分) (floor函数)
查看>>
1029 旧键盘 (20 分)
查看>>
Prime Ring Problem HDU - 1016 ( 搜索DFS )
查看>>
棋盘问题 POJ - 1321 ( 搜索 DFS)
查看>>
非常可乐 HDU - 1495 ( 搜索 BFS )
查看>>
2698:八皇后问题 OpenJ_Bailian - 2698 ( 搜索 DFS )
查看>>
2754:八皇后 OpenJ_Bailian - 2754 ( 搜索 DFS )
查看>>
1027 打印沙漏 (20 分)
查看>>
1028 人口普查 (20 分)
查看>>
Numbers HDU - 5585
查看>>
1030 完美数列 (25 分)
查看>>
1031 查验身份证 (15 分)
查看>>
1032 挖掘机技术哪家强 (20 分)
查看>>
1033 旧键盘打字 (20 分)
查看>>
Longest k-Good Segment CodeForces - 616D ( 尺取法)
查看>>
二叉搜索树的实现(BST)(插入+删除+查找+各种遍历+高度)
查看>>
今夕何夕 HDU - 6112 ( 模拟 )
查看>>
Dividing HDU - 1059 ( 多重背包 - 二进制简化 )
查看>>