leetcode (Remove Duplicates from Sorted Array)
阿新 • • 發佈:2018-11-21
Title: Remove Duplicates from Sorted Array 26
Difficulty:Easy
原題leetcode地址:https://leetcode.com/problems/remove-duplicates-from-sorted-array/
1. 採用雙引用(指標),時間&空間複雜度如下:
時間複雜度:O(n),一層while迴圈,遍歷的是陣列的長度。
空間複雜度:O(n),沒有申請額外的空間。
/** * 採用雙指標(快慢指標)來記錄遍歷的座標,開始是兩個指標都是指向第一個數字, * 如果兩個指標指向的數字相同,快指標向前一步,慢指標不動 * 如果兩個指標指向的數字不同,兩個指標都向前一步,同時需要把快指標的值賦值給慢指標的值 * 最後,快指標遍歷完,慢指標的位置就是返回的值(座標+1) * @param nums * @return */ public static int removeDuplicates(int[] nums) { if (nums.length <= 0) { return 0; } int slow = 0; int qick = 0; while (qick < nums.length) { if (nums[slow] == nums[qick]) { ++qick; } else { nums[++slow] = nums[qick++]; } } return slow + 1; }
2. 採用雙引用(指標),上述時while迴圈,這裡的是for迴圈。時間&空間複雜度如下:
時間複雜度:O(n),一層for迴圈,遍歷的是陣列的長度。
空間複雜度:O(n),沒有申請額外的空間。
/** * for迴圈,i相當於上述的qick,機相當於上述的slow * @param nums * @return */ public static int removeDuplicates1(int[] nums) { if (nums.length <= 0) { return 0; } int j = 0; for (int i = 0; i < nums.length; i++) { if (nums[i] != nums[j]) { nums[++j] = nums[i]; } } return j + 1; }