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.
最开始我没看清楚题目,想着return新的长度就行,想着用空间换取时间,写的算法是
public int removeDuplicates(int[] nums) {
if (nums.length == 0)
return 0;
int j = 0;
int temp[] = new int[nums.length];
temp[j++] = nums[0];
for (int i = 0; i < nums.length - 1; i++)
if (nums[i] != nums[i + 1])
temp[j++] = nums[i + 1];
for (int i = 0; i < temp.length; i++) {
System.out.println(temp[i]);
}
return j;
}
后来仔细看题目是要把nums数组的值也要改掉
public int removeDuplicates1(int[] nums) {
if (nums.length == 0)
return 0;
int k = 0;
for (int i = 0; i < nums.length - 1; i++) {
if (nums[i] == nums[i + 1])
k++;
else
nums[i + 1 - k] = nums[i + 1];
}
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
return nums.length - k;
}
提交成功之后,看了一下别人的算法:
public int removeDuplicates(int[] nums) {
if (nums.length == 0) return 0;
int i = 0;
for (int j = 1; j < nums.length; j++) {
if (nums[j] != nums[i]) {
i++;
nums[i] = nums[j];
}
}
return i + 1;
}
题目比较简单,不多说,接着下一个。