4 7 80 刪除排序陣列中的重複項 II

2022-09-07 05:15:16 字數 903 閱讀 5851

因為python的list可以直接del list[index],因此直接使用了暴力方法,判斷是否重複了兩次,是的話直接使用del。

在轉向使用j**a時,因為暴力方法的侷限,一直在找怎樣對j**a的array進行具體索引的元素刪除,但是發現array初始化之後長度並不能進行修改,只能new乙個array進行複製,不符合題目原地的要求,轉去看題解。

根據題解提示後,採用快慢雙指針對原陣列進行遍歷:

slow:代表將要返回的陣列的後邊界(修改後的陣列到nums[slow - 1])

fast: 代表當前遍歷到的數字

這題能這麼做,是因為原陣列是公升序,保證了修改後的陣列nums[:slow]中一定也是公升序。對於當前遍歷到的元素,存在著以下的約束關係:

nums[slow - 2] <=  nums[slow - 1] <=  nums[fast]

因此要判斷當前元素nums[fast]是否重複了兩次,只需要進行 nums[slow - 2] ?= nums[fast] 的比較:

if nums[slow - 2] == nums[fast] —— 只要等式成立,那麼一定有:

nums[slow - 2] ==  nums[slow - 1] ==  nums[fast]

說明當前元素重複了兩次,fast可直接跳過:

fast += 1

else nums[slow - 2] != nums[fast] —— 要是等式不成立,說明至多只有 nums[slow - 1] ==  nums[fast] 成立,即只有一次重複,還需將元素新增到陣列中,陣列長度也需+1:

nums[slow] =  nums[fast]

slow += 1

fast += 1

最後返回slow即可。(slow代表了最後陣列的長度,修改後的陣列是 nums[ : slow])

刪除排序陣列中的重複項

題目描述 給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 給定陣列 nums 1,1,2 函式應該返回新的長度2,並且原陣列 nums 的前兩個元素被修改為...

刪除排序陣列中的重複項

給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為 1...

刪除排序陣列中的重複項

給定陣列 nums 1,1,2,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為 1,2。你不需要考慮陣列中超出新長度後面的元素。給定 nums 0,0,1,1,1,2,2,3,3,4 函式應該返回新的長度 5,並且原陣列 nums 的前五個元素被修改為 0,1,2,3,4。...