用双指针解决数组问题
能够在idea中正常运行出来,如需完整代码,请看上一篇。
删除你想要删除的值。
删除你想要删除的元素,并返回数组长度。
代码的解题思路都在注释里(实在不理解不出来debug一下就懂了)。
/**
* 删除你想要删除的值,双指针问题
* @param arr 数组
* @param key 要删除的值
*/
public static void removeElement(int[] arr,int key){
//定义慢指针slow
int slow = 0;
//定义快指针fast,循环
for (int fast = 0; fast < arr.length; fast++) {
//把要删除的值直接进行跳过
if(arr[fast] != key){
arr[slow] = arr[fast];
slow++;
}
}
System.out.println(Arrays.toString(arr));
}
/**
* 删除相同元素,并返回数组的长度
* @param arr
*/
public static void removeDuplicates(int[] arr){
//定义一个慢指针slow,赋值1是为了返回链表长度,
int slow = 1;
//定义快指针fast
for (int fast = 0;fast < arr.length; fast++){
//判断条件,然后快指针fast与slow慢指针进行比较
if (arr[fast] != arr[slow-1]){
arr[slow] = arr[fast];
slow++;
}
}
System.out.println(slow);
}