直接后面的覆盖前面的就好了。
相同的跳过,不相同的把前面的重复出现的覆盖掉就好了,简洁明了。
public int removeDuplicates1(int[] nums){
int i = 0;
for (int j = 1;j < nums.length;j++){
if (nums[j] != nums[i]){
i++;
nums[i] = nums[j];
}
}
System.out.println(Arrays.toString(nums));
return i + 1;
}
自己写的先存在Map里,最后再交换元素。很麻烦。
public int removeDuplicates(int[] nums) {
if (nums.length == 0 || nums == null)return 0;
int len = nums.length;
int newlen = len - 1;
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i <= newlen; i++) {
if (map.containsKey(nums[i])){
//删除
while (i <= newlen ){
if (nums[i] == nums[newlen]){
Arrays.sort(nums,0,i);
System.out.println("111" + Arrays.toString(nums));
return i;
}
else if (map.containsKey(nums[newlen])) {
newlen--;}
else {
map.put(nums[newlen],1);
swap(nums,i,newlen);
newlen--;
break;
}
}
}
else map.put(nums[i],1);
}
Arrays.sort(nums,0,newlen+1);
System.out.println("222" + Arrays.toString(nums));
return newlen+1;
}