Java每日一题———删除有序数组中的重复项

这个问题可以通过使用双指针技术来解决。我们可以使用两个指针,一个慢指针 slowRunner 用于跟踪新数组的末尾,另一个快指针 fastRunner 用于遍历数组。每当 fastRunner 遇到一个新的唯一元素时,就将其复制到 slowRunner 指向的位置,并将 slowRunner 向前移动一位。

下面是具体的实现代码:

public class Solution {

public int removeDuplicates(int\[\] nums) {

if (nums.length == 0) return 0;

int slowRunner = 0;

for (int fastRunner = 1; fastRunner < nums.length; fastRunner++) {

// 如果当前元素与前一个元素不同,则将其复制到 slowRunner 指向的位置

if (numsfastRunner != numsslowRunner) {

slowRunner++;

numsslowRunner = numsfastRunner;

}

}

// 返回唯一元素的数量

return slowRunner + 1;

}

}
解释

  1. **初始化:**设置 slowRunner 和 fastRunner 初始值分别为 0 和 1。同时检查数组是否为空。
  2. **遍历数组:**使用 fastRunner 来遍历数组,从第二个元素开始。
  3. **比较并移动:**如果 fastRunner 当前指向的元素与 slowRunner 指向的元素不同,则将 fastRunner 的元素复制到 slowRunner 后面,并将 slowRunner 向前移动一位。
  4. **返回结果:**当 fastRunner 遍历完整个数组后,slowRunner + 1 就是唯一元素的数量。

这种方法的时间复杂度为 O(n),其中 n 是数组的长度,因为每个元素只被访问一次。空间复杂度为 O(1),因为我们是在原数组上操作,没有使用额外的空间。

这种方法保证了元素的相对顺序保持一致,并且只保留了唯一的元素。

相关推荐
Json____6 分钟前
基于 Spring Boot + Vue3 的在线考试管理系统实战
java·spring boot·后端·it学习·wwwoop.com
weixin_537590458 分钟前
《Spring快速入门到精通》- 实例1.1
java·spring·intellij-idea
jason成都15 分钟前
RTKLIB Java版:从C到Java的精密定位引擎,SPP/RTK/PPP/PPP-AR/PPP-RTK全栈实现
java·gnss·rtklib
Data_Journal17 分钟前
如何在 Java 中使用 Selenium 绕过 CAPTCHA
java
Sam_Deep_Thinking20 分钟前
如何理解java的信号量
java·后端·面试·程序员
晴空蓝天32 分钟前
MDC traceId 全链路日志追踪:Spring Boot 3.5 里把日志串成一条线
java·spring boot·后端·python
泡海椒38 分钟前
JQuick-Excel 项目定位与适用场景:声明式 Java Excel 的边界
java·开发语言·excel
AC赳赳老秦41 分钟前
财报附注表格精准提取:OpenClaw 从 PDF 年报附注挖掘隐藏明细,补齐财务分析维度
java·汇编·c++·python·青少年编程·deepseek·openclaw
箓维1 小时前
线程的优缺点,与进程的关联和差异
java·服务器·笔记
曹牧1 小时前
Spring MVC:@RequestMapping
java·spring·mvc