目錄
1.題目描述:
2.算法分析:
3.代碼展示:
1.題目描述:
給你一個?非嚴格遞增排列?的數組?nums
?,請你?原地?刪除重復出現的元素,使每個元素?只出現一次?,返回刪除后數組的新長度。元素的?相對順序?應該保持?一致?。然后返回?nums
?中唯一元素的個數。
考慮?nums
?的唯一元素的數量為?k
?,你需要做以下事情確保你的題解可以被通過:
- 更改數組?
nums
?,使?nums
?的前?k
?個元素包含唯一元素,并按照它們最初在?nums
?中出現的順序排列。nums
?的其余元素與?nums
?的大小不重要。 - 返回?
k
?。
判題標準:
系統會用下面的代碼來測試你的題解:
int[] nums = [...]; // 輸入數組 int[] expectedNums = [...]; // 長度正確的期望答案int k = removeDuplicates(nums); // 調用assert k == expectedNums.length; for (int i = 0; i < k; i++) {assert nums[i] == expectedNums[i]; }
如果所有斷言都通過,那么您的題解將被?通過。
示例 1:
輸入:nums = [1,1,2]
輸出:2, nums = [1,2,_]
解釋:函數應該返回新的長度 2
示例 2:
輸入:nums = [0,0,1,1,1,2,2,3,3,4]
輸出:5, nums = [0,1,2,3,4]
解釋:函數應該返回新的長度 5
2.算法分析:
-
初始化指針??:
- 使用一個指針?
index
?來表示當前不重復數組的末尾位置。初始時,index = 1
,因為第一個元素(nums[0]
)肯定是不重復的。
- 使用一個指針?
-
??遍歷數組??:
- 從第一個元素開始(
i = 0
),遍歷到倒數第二個元素(i < nums.size() - 1
)。 - 比較當前元素?
nums[i]
?和下一個元素?nums[i + 1]
:- 如果它們不相等,說明?
nums[i + 1]
?是一個新的唯一元素,將其放到?nums[index]
?的位置,然后?index
?自增。 - 如果它們相等,則跳過,繼續檢查下一個元素。
- 如果它們不相等,說明?
- 從第一個元素開始(
-
??返回結果??:
- 最終?
index
?的值即為去重后數組的長度。
- 最終?
3.代碼展示:
int removeDuplicates(vector<int>& nums) {int index = 1;//開始遍歷數組for (int i = 0; i < nums.size()-1; i++) {if (nums[i] != nums[i + 1]) {nums[index] = nums[i + 1];index++;}}return index;
}
26. 刪除有序數組中的重復項 - 力扣(LeetCode)https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/