题目描述:
给定一个排序数组,删除重复的位置,使每个元素只出现一次并返回新的长度。不要为另一个数组分配额外的空间,必须使用常量内存来执行此操作。
例如,给定输入数组nums = [1,1,2]
,你的函数应该返回length = 2
,num的前两个元素分别为1
和2
。没有什么你离开超出了新的长度。
算法描述:
public static int removeDuplicates(int[] nums) {
int len = nums.length;
if (len == 0 || len == 1)
return len;
Arrays.sort(nums);// 先排序
List<Integer> list = new ArrayList<>();
for (int i = 1; i < nums.length; i++) {
if (nums[i] == nums[i - 1]) {
list.add(i);
}
}
for(int i=list.size()-1;i>=0;i--)
{
for(int k=list.get(i);k<len-1;k++)
{
nums[k]=nums[k+1];
}
len-=1;
}
return len;
}