给定一个排序数组,删除数组中重复的数字,要求在O(1)的空间完成,在原数组上进行操作,返回删除后数组的长度。
思路:很简单的题,可以借鉴插入排序的思路,如果相等就不插入。
代码:
public class RemoveDuplicatesFromSortedArray {
public int removeDuplicates(int[] nums) {
if(nums.length == 0)return 0;
int tmp,len = nums.length,j = 0;
tmp = nums[j];
for(int i = 1;i<len;i++) {
if(nums[i] != tmp) {
nums[++j] = nums[i];
tmp = nums[j];
}
}
return j+1;
}
public static void main(String[] args) {
System.out.println(new RemoveDuplicatesFromSortedArray()
.removeDuplicates(new int[] {1,1,2}));
System.out.println(new RemoveDuplicatesFromSortedArray()
.removeDuplicates(new int[] {0,0,1,1,1,2,2,3,3,4}));
System.out.println(new RemoveDuplicatesFromSortedArray()
.removeDuplicates(new int[] {}));
}
}
运行结果: