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));
    }
}



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