Given a sorted array nums, 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 by modifying the input array in-placewith O(1) extra memory.
Example 1:
Given nums = [1,1,2],
Your function should return length = 2,
It doesn't matter what you leave beyond the returned length.
自己的代码:O(n^2)
Runtime: 78 ms, faster than 5.06% of Java online submissions for Remove Duplicates from Sorted Array.
Memory Usage: 42.5 MB, less than 15.26% of Java online submissions for Remove Duplicates from
class Solution {
public int removeDuplicates(int[] nums) {
if(nums == null || nums.length == 0) {
return 0;
}
int len = 1;
for(int i=1;i<nums.length;i++) {
for(int j=0;j<len;j++) {
if(nums[i] == nums[j]) {
break;
}
if(j == len-1) {
nums[len] = nums[i];
len++;
}
}
}
return len;
}
}
小结:
a)慢如狗
别人的代码
class Solution {
public int removeDuplicates(int[] nums) {
int count = 0;
for(int i = 1; i < n; i++){
if(A[i] == A[i-1]) count++;
else A[i-count] = A[i];
}
return n-count;
}
}
小结
a)最后count记录了重复的数字的总个数,n-count就是最后的不重复的数字个数
b)同时让数字索引的0到第(n-count-1)个元素,成为那不重复的n-count个数;