删除有序数组中的重复项
2022/1/27 23:04:27
本文主要是介绍删除有序数组中的重复项,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
【题目描述】
给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组 并在使用 O(1) 额外空间的条件下完成。
【示例 1】
输入:nums = [1,1,2] 输出:2, nums = [1,2] 解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。
【示例 2】
输入:nums = [0,0,1,1,1,2,2,3,3,4] 输出:5, nums = [0,1,2,3,4] 解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。
【题目分析】
题目已说明是有序数组,且nums数组已按升序排列,则重复的元素一定出现在附近。
数组可能为空,需要对数组进行判空操作。
要特别注意的是,题目要求使用O(1)的空间复杂度,即必须在原数组上操作,不能创建新数组用于存储。
考虑使用双指针将所有不重复的元素移动到数组的最左边,然后输出指针下标。
设置 i=0 和 j=1 的两个指针,比较 i 和 j 位置的元素是否相等。
如果相等,j 后移 1 位
如果不相等,将 j 位置的元素复制到 i+1 位置上,i 后移一位,j 后移 1 位
重复上述过程,直到 j 等于数组长度。
返回 i + 1,即为新数组长度。
【实现代码】
1 class Solution { 2 public int removeDuplicates(int[] nums) { 3 if(nums.length==0||nums.length==1){ 4 return nums.length; 5 }else{ 6 int i=0; 7 int j=1; 8 while(j<nums.length){ 9 if(nums[i]==nums[j]){ 10 j++; 11 }else{ 12 nums[i+1]=nums[j]; 13 i++; 14 } 15 } 16 return i+1; 17 } 18 } 19 }
这篇关于删除有序数组中的重复项的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器
- 2024-11-26Java云原生资料:新手入门教程与实战指南
- 2024-11-26JAVA云原生资料入门教程
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程