删除排序数组中的重复项
双指针删除重复项
双指针法,首先我写了2中解法
一种是利用set去重,只能获取数组中的值个数。 不能原地修改数组
所以正确做法应该是双指针
public class T8 {
public static int getI(int[] arr) {
Set<Integer> integers =new HashSet<Integer>();
for (int i = 0; i < arr.length; i++) {
integers.add(arr[i]);
}
System.out.println(integers);
return integers.size();
}
public static int getII(int[] arr) {
//一上来直接判断
if (arr==null) return 0;
//原始指针i
int i = 0;
//新指针j
for (int j = 1; j < arr.length; j++) {
//
if (arr[j]!=arr[i]) {
i++;
arr[i]=arr[j];
}
}
return i+1;
}
public static void main(String[] args) {
int[] arr = {1,1,2};
System.out.println(getI(arr));
System.out.println(getII(arr));
}
}
这样双指针的绝妙之处就是:
不相等的时候可以确定第i(第一位)位的值,他之后有可能有 1 1 1 2 ,这时候会直接i+1,在吧j也就是第四位,赋值给第i+1(第二位)。
而不相等的时候又会自动的往后跳,j自己会自增。
最后输出的值,不是什么length属性方法,而是确定的第i的值的下标+1.