14. Leetcode 80. 删除有序数组中的重复项 II (数组-同向双指针-快慢指针)
生活随笔
收集整理的這篇文章主要介紹了
14. Leetcode 80. 删除有序数组中的重复项 II (数组-同向双指针-快慢指针)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給你一個有序數組 nums ,請你 原地 刪除重復出現的元素,使每個元素 最多出現兩次 ,返回刪除后數組的新長度。不要使用額外的數組空間,你必須在 原地 修改輸入數組 并在使用 O(1) 額外空間的條件下完成。說明:為什么返回數值是整數,但輸出的答案是數組呢?請注意,輸入數組是以「引用」方式傳遞的,這意味著在函數里修改輸入數組對于調用者是可見的。你可以想象內部操作如下:// nums 是以“引用”方式傳遞的。也就是說,不對實參做任何拷貝
int len = removeDuplicates(nums);// 在函數里修改輸入數組對于調用者是可見的。
// 根據你的函數返回的長度, 它會打印出數組中 該長度范圍內 的所有元素。
for (int i = 0; i < len; i++) {print(nums[i]);
}示例 1:輸入:nums = [1,1,1,2,2,3]
輸出:5, nums = [1,1,2,2,3]
解釋:函數應返回新長度 length = 5, 并且原數組的前五個元素被修改為 1, 1, 2, 2, 3 。 不需要考慮數組中超出新長度后面的元素。
示例 2:輸入:nums = [0,0,1,1,1,1,2,3,3]
輸出:7, nums = [0,0,1,1,2,3,3]
解釋:函數應返回新長度 length = 7, 并且原數組的前五個元素被修改為?0, 0, 1, 1, 2, 3, 3 。 不需要考慮數組中超出新長度后面的元素。思路:遍歷整個表
把當前的元素與它前面的對比,如果二者元素相同(為重復元素):此時統計重復的計數器 count+=1。題目要求只保留 2 個重復的元素,這里需要加入重復元素個數的判斷:
這個元素正好重復了 2 次 => 則進行保留。列表長度 i+=1,然后 nums[i]=nums[j]; 這個元素重復多于 2 次 => 不進行任何操作。體現在程序上不做處理 把當前的元素與它前面的對比,如果二者元素不同(為新元素):此時把當前這個結點 (nums[j]) 添加到新表里面去,nums[i] = nums[j], 表長 i+1。class Solution:def removeDuplicates(self, nums: List[int]) -> int:left, right, n = 2, 2, len(nums)if n < 2:return nwhile right < n:if nums[left - 2] != nums[right]:nums[left] = nums[right]left += 1right += 1return left
總結
以上是生活随笔為你收集整理的14. Leetcode 80. 删除有序数组中的重复项 II (数组-同向双指针-快慢指针)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 13. Leetcode 349. 两个
- 下一篇: 16. Leetcode 845. 数组