题目描述
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
要求
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
例如:
给定 nums =[0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度5, 并且原数组nums 的前五个元素被修改为0,1,2,3,4。
你不需要考虑数组中超出新长度后面的元素。
分析
- 使用一个整型变量(初始值为初始数组长度)来标识最终得到的不重复数组长度。数组是有序的,只需要按顺序从左到右比较相邻的两个数是否相等,相等则将后一个数去掉,然后将标识长度的变量减一。
- 关于删除数组中元素的方法:这里由于不需要官查出新长度后面的元素,这里简单的将要移除元素后面的元素依次往前移动依次即可完成重复元素的删除。
代码实现
public class Solution1 {
public static int removeDuplicates(int[] nums) {
int resultLength = nums.length;
for(int i = 0; i < resultLength;i++){
for(int j = i+1;j<resultLength;){
//比较相邻两个元素大小,如果大小相等,移除后一个元素,将标志不重复数组长度的值减一
if(nums[i] == nums[j]){
removeCurrentElement(nums,j,resultLength);
resultLength--;
}else {
break;
}
}
}
return resultLength;
}
//移除重复元素
public static void removeCurrentElement(int[] nums, int i,int resultLength){
for(int j = i;j < resultLength-1; j++){
nums[j] = nums[j+1];
}
}
public static void main(String[] args) {
int[] nums = {0,0,1,1,1,2,2,3,3,4,4,4,4,4};
int length = removeDuplicates(nums);
System.out.println("length:" + length);
for(int i = 0;i<length;i++){
System.out.println("i:" + nums[i]);
}
}
}
执行结果
length:5
i:0
i:1
i:2
i:3
i:4
网友评论