第四题leetCode 删除排序数组中的重复项

给定一个排序数组,你需要在原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度

首先,如果不是原地删除,可以想到几个方法

1,把数组放到set中,set集合本身是不重复的

Integer arryIn = {1,1,2}

Set sst = new HashSet<>(Arrays.asList(arryIn ));

 

2,第一个新的整型数组,遍历旧的的数组,如果

有相等的值,就不放入新的数组

int[] arry2 = {1,1,2};
Set sst2= new HashSet();
for(int i= 0; i< arry2.length;i++){
sst2.add(arry2[i]);
}
for(Object sstir : sst2){
System.out.println(sstir);
}

没有进行比对,原因是
1,set本身不重复
2,set的底层是链表,添加,删除元素效率比List高
所以采用set

那么原地删除呢?------------------------------------------------------------
//原地删除:定义一个慢指针i,和一个快指针j,当nums[i] == nums[j] ,移动快指针到下一位
//直到nums[i] != nums[j],这时,将number[j] 赋值为num[i+1]
int i= 0;
for(int j=1; j<arry2.length;j++){
if(arry2[i] != arry2[j]){
i++;
arry2[i] = arry2[j];
}
}


posted @ 2020-04-07 13:39  阿杜地带  阅读(151)  评论(0)    收藏  举报