-
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 -
解题思路:首先注意是有序数组用j记录当前数组不重复向前走的下标,当遇到不重复的数值,填进数组中。如果遇到长度为0或者1,直接返回,遍历一遍后,如果都是相同元素,则直接返回j+1,即1即可。
class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length == 0 || nums.length ==1){
return nums.length;
}
int j = 0;
for(int i = 0; i < nums.length-1 ; i ++){
if(nums[i] != nums[i+1]){
nums[j] = nums[i];
j ++;
}
}
if(j !=0 &&nums[j-1] != nums[nums.length-1]){
nums[j] = nums[nums.length-1];
}
return j+1;
}
}
最优解:对上方我的思路里面长度-1这个做了优化,下表从1开始,然后先j++ ,再将元素放入后面,就省去了我之前的比较问题。
class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length == 0 || nums.length == 1){
return nums.length;
}
int j = 0;
for(int i = 1; i < nums.length; i ++){
if(nums[j] != nums[i]){
j ++;
nums[j]= nums[i];
}
}
return j + 1;
}
}