26.给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
删除排序数组中的重复项
分析:不使用额外的数组空间,必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
考虑 用已确定数与后面的数对比。
class Solution {
public int removeDuplicates(int[] nums) {
if(nums==null)//判断数组是否为空
return 0;
int flag=0;
//用flag 表示新数组第i位元素的下标(i从0开始)
//旧数组的下标后移,与新数组对比,相同就继续后移
//不同的话,就存入新数组
for(int i=0;i<nums.length;i++){
if(nums[flag]!=nums[i]){
flag++;
nums[flag]=nums[i];
}
}
return (flag+1);
}
}
参考:一路一沙
- 删除排序数组中的重复项 II
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。
分析:与26题类似,只是增加了一个判断,是否count>=2.
class Solution {
public int removeDuplicates(int[] nums) {
if(nums==null)
return 0;
int len=nums.length;
int flag=0;//标志位判断
int count=0;//count 为出现的次数
for(int i=0;i<len;i++){
if(nums[flag]!=nums[i]){
flag++;
count++;
nums[flag]=nums[i];
}else{
if(count<2){
flag++;
nums[flag]=nums[i];
count++;
}
}
}
return flag+1;
}
}

本文介绍如何在原地删除排序数组中的重复元素,并确保每个元素只出现一次或两次,同时保持O(1)的空间复杂度。通过具体示例代码展示了两种情况下的实现方法。
1472

被折叠的 条评论
为什么被折叠?



