给你一个有序数组 nums, 请你 原地 删除重复出现的元素, 使每个元素 只出现一次,返回删除后数组的新长度.
- 方法一:双指针+临时数组
//方法一:双指针+临时数组
public class DuplicatesArray {
public static void main(String[] args) {
int[] nums = {0,1,1,2,2,2,2,3,3,5,5,5};
System.out.println(removeDuplicates(nums));
}
private static int removeDuplicates(int[] nums) {
int n = nums.length;
int j = 1;
int i = 0;
int[] num = new int[n];
int p = 0;
while(j<n){
if(nums[i]!=nums[j]){
num[p++] = nums[i];
i++;
j++;
} else{
while(j<n-1 && nums[j]== nums[j+1] ) {
j++;
}
i=j;
j++;
}
}
if(i<n){
num[p++] = nums[i++];
}
return p;
}
}
- 方法二:哈希表
import java.util.HashMap;
import java.util.Map;
public class DuplicatesArray {
public static void main(String[] args) {
int[] nums = {0,1,1,2,2,2,2,3,3,5,5,5};
System.out.println(removeDuplicates(nums));
}
private static int removeDuplicates(int[] nums) {
Map<Integer,Integer> map = new HashMap<>();
int n = nums.length;
int j = 0;
for(int i = 0; i<n;i++){
if(!(map.containsKey(nums[i]))){
map.put(nums[i],j++);
}
}
for(Integer key : map.keySet()){
nums[map.get(key)] = key;
}
return map.size();
}
}