Java教程

双指针算法删除数组中重复的元素

本文主要是介绍双指针算法删除数组中重复的元素,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

基础算法练习:删除数组中重复的元素

/**
 * @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
    }
}
这篇关于双指针算法删除数组中重复的元素的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!