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 (nums[fastRunner] != nums[slowRunner]) {

slowRunner++;

nums[slowRunner] = nums[fastRunner];

}

}

// 返回唯一元素的数量

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

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

相关推荐
小沛93 小时前
从“会敲 Arthas 命令”到“会做线上诊断”:我做了一个 Arthas Agent 工具
java·jvm·spring·agent
短剑重铸之日3 小时前
《ShardingSphere解读》04 配置驱动:ShardingSphere 中的配置体系是如何设计的?
java·数据库·后端·spring·shardingsphere
独断万古他化3 小时前
【抽奖系统开发实战】Spring Boot 项目的设计思路、技术选型与公共模块处理
java·spring boot·后端·系统架构
健康平安的活着3 小时前
java8案例对list[过滤、分组,转换,查找等]清洗逻辑
java·数据结构·list
花间相见3 小时前
【JAVA基础09】—— 赋值与三元运算符:从基础到实操的避坑指南
java·开发语言·python
ywlovecjy3 小时前
windows配置永久路由
java
草莓熊Lotso3 小时前
Linux 进程间通信之命名管道(FIFO):跨进程通信的实用方案
android·java·linux·运维·服务器·数据库·c++
小江的记录本3 小时前
【AOP】AOP-面向切面编程 (系统性知识体系全解)
java·前端·后端·python·网络协议·青少年编程·代理模式
XiaoLeisj4 小时前
Android 文件与数据存储实战:SharedPreferences、SQLite 与 Room 的渐进式实现
android·java·数据库·ui·sqlite·room·sp
MegaDataFlowers4 小时前
认识O(NlogN)的排序
java·开发语言·排序算法