雙指標演算法刪除陣列中重複的元素
阿新 • • 發佈:2021-09-29
基礎演算法練習:刪除陣列中重複的元素
/** * @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 } }