本文主要是介绍双指针算法删除数组中重复的元素,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
基础算法练习:删除数组中重复的元素
/**
* @author JH_Y
* @version 1.0
* 删除数组中重复的元素
*/
public class RemoveArrayIterableValue {
public static void main(String[] args) {
/*
* 个有序数组nums,原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。
* 不能使用额外的数组空间,必须在原地修改输入数组并在使用O(1)额外空间的条件下完成
* 例:输入:[0,1,2,2,3,3,4]
* 输出:5
* 重点考察:双指针算法
*/
int[] arr = {0, 1, 2, 2, 3, 3, 4};
System.out.println(removeIterable(arr));
}
/*
双指针算法
数组完成排序后,我们可以放置两个指针i和j其中i是慢指针,而j是快指针。只要arr[i] = arr[j],我们就增加j以跳过重复项
当遇到arr[j] != arr[i]时,跳过重复项的运行已经结束,必须把arr[j]的值复制到arr[i+1]。
然后递增i,接着将再次重复相同的过程,直到j到达数组的末尾为止
*/
public static int removeIterable(int[] arr) {
if (arr == null || arr.length == 0) {
return 0;
}
int i = 0;//索引
for (int j = 1; j < arr.length; j++) {
if (arr[j] != arr[i]) {
i++;
arr[i] = arr[j];
}
}
return i + 1;//数组长度=索引+1
}
}
这篇关于双指针算法删除数组中重复的元素的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!