1. 程式人生 > 其它 >雙指標演算法刪除陣列中重複的元素

雙指標演算法刪除陣列中重複的元素

基礎演算法練習:刪除陣列中重複的元素

/**
 * @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
    }
}