【LeetCode】删除有序数组中的重复项 Java 题解
题目描述
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
说明:
为什么返回数值是整数,但输出的答案是数组呢?
请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
你可以想象内部操作如下:
复制代码
思路分析
这个题目是一个数组简单题目,首先来回顾一下数组的基本知识。在 Java 中,数组是用来存储固定大小的同类型元素,内存中为一段连续的空间,我们一般使用数组元素下标来访问数组元素,时间复杂度为 O(1)。
因此,在解决数组题目时候,我们常常使用数组下标提升速度。快慢指针就是常见的数组题目解决方法。
本题题意一句话简述为,删除有序数组中的重复项,并返回数组不重复元素长度。使用快慢指针,可以快速找到不重复的元素。
代码
复制代码
朴素思路完成代码之后,观察到 while 中判断有些冗余,提取公共部分,然后得到如下代码。
复制代码
总结
上述代码的时间复杂度是 O(n), 空间复杂度是 O(1)
坚持每日一题,加油!
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/f5e3ce74d69d0e075dbf7603e】。文章转载请联系作者。
评论