Problem26 删除排序数组中的重复项

删除排序数组中的重复项>>>

在这里插入图片描述

对于数组、链表、字符串:一般可以采用双指针,定义两个指针,left,right,指针的含义分别是已经过滤号的数组的尾部,和不重复数组的头部,若发现nums[left]==nums[right]则不断向后移动right直到发现不重复的元素,则将nums[left+1]=nums[rightt]遍历上述过程、

package KTwoPointers;

import AarrayProblem.Problem1;

import java.util.Arrays;

/**
 * @Author Zhou  jian
 * @Date 2020 ${month}  2020/5/3 0003  23:00
 * 双指针、快慢指针
 */
public class Problem26 {

    public int removeDuplicates(int[] nums) {

        //剪枝,当数组的长度为0或1时,直接返回数组的长度
        if(nums.length==0) return 0;
        if(nums.length==1) return 1;


       //设慢指针的第一项
        int left = 0;//之前确定
        //设快指针的第一项
        int right = 1;//遍历之后的元素,若发现重复元素则不断向后移动直到发现第一个不重复元素

        //循环停止条件:快指针遍历完了整个数组
        while(right<nums.length){

            if(nums[left]==nums[right]){
                //当快指针和慢指针的数据相同时
                //则不处理,快指针向前进一位向前意味
               right++;
            }else{
                //当快慢指针处的数据不同时,
                //将慢指针后的一位数据更改为块指针处的数据
                //同时快慢指针同时向前进一位
                //第一个不重复的位置的元素赋值到已经确定不重复数组的位置
                left++;
                nums[left]=nums[right];
                right++;
            }


        }
        return left+1;
    }

    public static void main(String[] args) {
        int[] arr = {1,1,2};
        Problem26 problem26 = new Problem26();
        problem26.removeDuplicates(arr);
        System.out.println(Arrays.toString(arr));
    }
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章