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),因为我们是在原数组上操作,没有使用额外的空间。

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

相关推荐
名字还没想好☜1 小时前
Go 的 time.Ticker 陷阱:定时任务里被忽略的内存泄漏与正确关闭
java·数据库·golang·go·定时器
音符犹如代码2 小时前
后端视角看 EventBus:发布订阅总线的原理、场景与用法
java·spring boot·guava
前端炒粉2 小时前
手撕小汇总
java·前端·javascript
唐青枫2 小时前
Java Kafka 实战指南:从 Topic、分区到 Spring Boot 可靠消息处理
java
脱胎换骨-军哥3 小时前
C++零成本抽象理论深度拆解:现代C++如何在不牺牲性能的前提下提供高级语法封装
java·开发语言·c++
我是唐青枫3 小时前
Java Netty 实战指南:从 NIO 线程模型到 TCP 编解码和心跳机制
java·tcp/ip·nio
小白说大模型3 小时前
从向量嵌入到复杂 Agent:LLM、LangChain、LangGraph 完整科普
java·开发语言·人工智能·gpt·深度学习·langchain
风起洛阳@不良使4 小时前
springIOC创建对象的方式--spring容器中的注入
java·spring
zhanghaha13145 小时前
Python语言基础:4_数据类型转换
java·前端·python
Devin~Y5 小时前
互联网大厂Java面试实战:Spring Boot、MyBatis、Redis、Kafka、JWT、Spring Cloud 与 AI 场景追问
java·spring boot·redis·spring cloud·kafka·mybatis·spring security