開心放假還是要來一天一題!
今天的題目大意是: 給一個已排序的nums,要求你原地刪除重複元素,讓每個元素只出現一次,並回傳新的長度。
ChatGPT給的解題思路如下:
陣列已排序 → 重複元素一定是連在一起的。
我們用兩個指標:
慢指標 (slow):標記「不重複區間」的最後一個位置。
快指標 (fast):向前掃描陣列。
當 nums[fast] != nums[slow],代表找到新元素,移到 slow+1 的位置,最後 slow + 1 就是新長度。
class Solution {
public int removeDuplicates(int[] nums) {
if (nums.length == 0) {
return 0;
}
int slow = 0; // 慢指標,標記「不重複區間」的尾端
for (int fast = 1; fast < nums.length; fast++) {
if (nums[fast] != nums[slow]) {
slow++;
nums[slow] = nums[fast];
}
}
return slow + 1; // 陣列長度 = index + 1
// 因為 slow 是最後一個不重複元素的 index,所以答案是 slow + 1。
}
}