题目
Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
For example,
Given input array nums = [1,1,2],
Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively. It doesn’t matter what you leave beyond the new length.
分析
去除数组中重复元素,并返回新数组的长度
public static int removeDuplicates(int[] nums) {
int xx = Integer.MIN_VALUE;
int ans = 0;
int current = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] > xx) {
ans++;
xx = nums[i];
nums[current++] = nums[i];
}
}
return ans;
}
这个方法有一个问题,就是在把初始值设为Integer.MIN_VALUE并不保险。
最好的方法还是,比较后一个和前一个是否相同,这样就需要判断数组长度为1的情况
int removeDuplicates(int A[], int n) {
if(n < 2) return n;
int id = 1;
for(int i = 1; i < n; ++i)
if(A[i] != A[i-1]) A[id++] = A[i];
return id;
}