給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。
不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o(1) 額外空間的條件下完成。
示例 1:
給定陣列 nums = [1,1,2],
函式應該返回新的長度 2, 並且原陣列 nums 的前兩個元素被修改為 1, 2。
你不需要考慮陣列中超出新長度後面的元素。
示例 2:
給定 nums = [0,0,1,1,1,2,2,3,3,4],
函式應該返回新的長度 5, 並且原陣列 nums 的前五個元素被修改為 0, 1, 2, 3, 4。
你不需要考慮陣列中超出新長度後面的元素。
思路一
單指標+正序遍歷
1.指標i開始指向列表的開始
2.從下標1處開始遍歷列表,當遍歷元素與指標處元素不相等時,指標+1,將遍歷元素賦值給移動後指標,若兩者相等,指標不動,繼續遍歷列表
3.遍歷完成後,返回i+1,既是不重複元素個數
**如下:
def
solution
(nums):if
not nums:
return
none
i =0for j in
range(1
,len
(nums)):
if nums[i]
!= nums[j]
: i +=
1 nums[i]
= nums[j]
return i+
1
思路二
既然無法正向遍歷時刪除元素,可以反向遍歷
1.從列表末尾開始遍歷元素,與前一項對比
2.如果兩者相等,刪除該位置元素,不相等則繼續遍歷
3.遍歷完成後返回列表長度
**如下:
def
soultion
(nums)
:for i in
range
(len
(nums)-1
,0,-
1):if nums[i]
== nums[i-1]
: nums.pop(i)
return
len(nums)
思路三
雙指標,前乙個指標記錄不同元素位置,後乙個指標尋找不同元素
1.初始化指標p和q,分別指向列表的0號元素和1號元素
2.判斷兩者是否相等,如果想等,q後移一位,不相等,將q指向的元素賦給p+1號元素,p和q同時後移一位
3.當q指標到達列表最後乙個元素時,結束比較,返回p+1
**如下:
if
not nums:
return
none
p =0
q =0
while q <
len(nums)
:if nums[q]
== nums[p]
: q +=
1else
: nums[p+1]
= nums[q]
p +=
1 q +=
1return p +
1
LeetCode 26 刪除排序陣列中的重複項
給定乙個排序陣列,你需要在原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為1...
leetcode26 刪除排序陣列中的重複項
給定乙個排序陣列,你需要在原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成 示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為1...
LeetCode 26刪除排序陣列中的重複項
給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度2,並且原陣列 nums 的前兩個元素被修改為1,2...